sqlite基于列值si.e创建有序分区。 DENSE_RANK()

时间:2017-04-02 18:06:40

标签: sql sqlite

如果有下表@

ID     VAR1
--     ----
A      YES
B      YES
C      YES
D      NO
E      YES
F      NO
G      YES
H      YES

我想创建一个新分区,其中VAR1在YESNO之间变化,如下所示:

ID     VAR1    VAR2
--     ----
A      YES     1
B      YES     1
C      YES     1
D      NO      2
E      YES     3
F      NO      4
G      YES     5
H      YES     5

显然我可能在sql server中使用dense_rank(),但我在sqlite中看不到相同的内容。

任何人都知道的解决方法吗?

1 个答案:

答案 0 :(得分:1)

这在SQLite中很棘手,但至少它支持CTE。这是个主意。 。拉入前一个值(使用相关子查询)。然后根据该值的逻辑进行累积求和。

with tt as (
      select t.*,
             (select t2.var1
              from t t2
              where t2.id < t.id
              order by t2.id desc
              limit 1
             ) as prev_var1
      from t
     )
select tt.*,
       (select sum(case when prev_var1 is null or prev_var1 <> var1 then 1 else 0 end)
        from tt tt2
        where tt2.id <= tt.id
       ) as var2
from tt;

这假设 - 如问题所示 - 排序由id列指定。