0
003
我有如下数据,我需要在某种程度上生成运行总数,但不是真的。当值从绿色变为黄色或红色时,则所有行为1,直到它再次从绿色变为红色或黄色,然后所有行为2,直到它发生变化。
我想我可以使用lag
函数来检查前一行与当前行,但不确定如何得到这个输出。
这是一个缺口和岛屿的变体。假设您有一个列来排序记录,例如id
,我们可以用lag
和sum
窗口来识别转换:
select id, val,
sum(case when lag_val = 'Green' and val != 'Green' then 1 else 0 end)
over(order by id) grp
from (
select t.*, lag(val, 1, val) over(order by id) lag_val
from mytable t
) t
order by id
grp0 003