基于备用行和列计数的Sqlite查询

时间:2014-07-02 07:23:17

标签: sqlite

我是Sqlite Db的新手,我有以下记录的表

|AutoID   |Data|Date|
-+-------------+----------
|1            |A   |7-1-2014        
|2            |A   |7-1-2014     
|3            |B   |7-1-2014      
|4            |C   |7-1-2014   
|5            |B   |7-1-2014     
|6            |A   |7-1-2014 

我必须确保每个数据[列]都是平等的,即如果数据[列]包含(A,A,B,C,B,A),它必须像队列一样,列必须像(A) ,B,C,A,B,A)。

注意:重新排列后会保留订单

所以我的选择查询应该产生以下输出

例外输出:

|AutoID   |Data|Date|
-+-------------+----------
|1            |A   |7-1-2014        
|3            |B   |7-1-2014     
|4            |C   |7-1-2014      
|2            |A   |7-1-2014   
|5            |B   |7-1-2014     
|6            |A   |7-1-2014 

我们在Sql Server中有分区,并且可以生成相同的输出,因为Sqlite没有分区,我在寻找是否可以通过选择查询实现相同的功能。

到目前为止,我已根据数据[列]对表进行分组,并产生以下输出。

  

从数据样本组中选择*;

|AutoID   |Data|Date|
-+-------------+----------
|1            |A   |7-1-2014        
|2            |A   |7-1-2014     
|6            |A   |7-1-2014      
|3            |B   |7-1-2014   
|5            |B   |7-1-2014     
|4            |C   |7-1-2014 

我可以知道如何在上面的语句之上编写查询并生成预期的输出吗?

1 个答案:

答案 0 :(得分:1)

您希望每个Data值的所有首次出现,然后是所有第二次出现,依此类推。

要计算特定记录的出现次数,请使用相关子查询来计算具有相同Data值的先前记录的数量:

SELECT Data,
       (SELECT COUNT(*)
        FROM Sample AS S2
        WHERE S2.Data   = Sample.Data
          AND S2.AutoID < Sample.AutoID
       ) AS Nr
FROM Sample
Data | Nr
---------
 A   | 0
 A   | 1
 B   | 0
 C   | 0
 B   | 1
 A   | 2

然后可以使用此计算值对输出进行排序:

SELECT AutoID,
       Data,
       Date,
       (SELECT COUNT(*)
        FROM Sample AS S2
        WHERE S2.Data   = Sample.Data
          AND S2.AutoID < Sample.AutoID
       ) AS Nr
FROM Sample
ORDER BY Nr, Data
相关问题