如果有下表@
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 中没有看到与之等效的方法。
有人知道任何解决方法吗?
最佳答案
这在 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
列指定的。
关于sqlite 根据列值创建有序分区,即密集等级(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43171716/