UPDATE:我本应该提到,是的,我已经搜索并尝试应用了许多例子,但没有一个给出想要的结果。
我正在尝试使用mysql计算大型数据集中连续值的数量。
我尝试过使用分区,但是没有得到正确的结果。
结果:使用分区
我正在寻找的结果是
结果:所需
这是数据集的一个样本
SQL Fiddle
有人能告诉我如何得到想要的结果吗?
这是一个经典的gaps and island
问题。代码应该是不言自明的,但这里有两个步骤的大致想法:
-
识别每个分区,通过将当前行中的值与前一行进行比较
-
使用带窗口的运行总和创建块/岛
with cte1 as
(select *, case when flagkey=lag(flagkey) over (partition by supplierkey, attributekey, productkey, locationkey order by datekey) then 0 else 1 end as island_start
from t),
cte2 as
(select *, sum(island_start) over (partition by supplierkey, attributekey, productkey, locationkey order by datekey) as island
from cte1)
select *, row_number() over (partition by island order by datekey) as outcome
from cte2