2017-04-02 27 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