我是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
我可以知道如何在上面的语句之上编写查询并生成预期的输出吗?
答案 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