2017-04-02 69 views
0

如果有以下表@sqlite根据列值si.e创建有序的分区。 DENSE_RANK()

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 

很显然,我可能会使用在dense_rank() SQL服务器,但我在sqlite中看不到这个。

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

+1

你想要的不是'dense_rank()'。 –

+0

这不是什么dense_rank。 – GurV

回答

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列中指定。

+0

谢谢戈登 - 这就是我一直在寻找的东西。祝一切顺利。 – brucezepplin