SQLite查询到GROUP BY附近的行

时间:2015-08-13 14:25:14

标签: sql sqlite group-by

我有一个SQLite .db文件,其中包含如下所示的Thread表:

ThreadID  ClusterID
1         0
2         0
3         0
4         1
5         1
6         0
7         1
8         1
9         0
10        1

我想通过附近的行对GROUP BY进行GROUP BY。输出将是:

ThreadID  ClusterID
1         0     
4         1
6         0
7         1
9         0
10        1

理想情况下:

ThreadID  ClusterID ClusterSwitch
1         0         NO
2         0         NO
3         0         NO
4         1         YES
5         1         NO
6         0         YES
7         1         YES
8         1         NO
9         0         YES
10        1         YES

整个设计用于检测集群何时从0切换到1以及从1切换到0

感谢您的帮助,非常感谢:) -Steve

1 个答案:

答案 0 :(得分:1)

假设您的线程ID实际上没有间隙,您可以使用自联接:

select t.*,
       (case when tprev.clusterid <> t.clusterid then 1 else 0 end) as ClusterSwitch
from threads t left join
     threads tprev
     on t.threadid = tprev.threadid + 1;

如果您无法确定没有间隙,可以使用相关子查询执行此操作:

select t.*,
       (case when t.clusterid <>
                  (select t2.clusterid
                   from threads t2
                   where t2.id < t.id 
                   order by t2.id desc
                   limit 1
                  )
             then 1 else 0 end) as ClusterSwitch
from threads t;

但是,此查询无法很好地扩展,因此性能可能会成为一个问题。