如果有下表@
ID VAR1
-- ----
A YES
B YES
C YES
D NO
E YES
F NO
G YES
H YES
我想创建一个新分区,其中VAR1在YES
和NO
之间变化,如下所示:
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中看不到相同的内容。
任何人都知道的解决方法吗?
答案 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
列指定。