有没有一种方法可以根据某些值将行分成几组?

时间:2020-09-08 10:50:23

标签: sql grouping window-functions

考虑此表:

enter image description here

我想根据ID和价格值将这些行分为几组:只要两行具有相同的ID和价格,并且不被其他任何行分开,则它们属于同一行组,所以我希望输出像这样:

enter image description here

我尝试使用窗口函数,但最后却得到了与前3个具有相同组的最后一行。

1 个答案:

答案 0 :(得分:1)

这是一个空白问题。一种方法是使用lag()来检测更改,然后使用累积和:

select t.*,
       sum(case when prev_price = price then 0 else 1 end) over
           (partition by id order by dt) as group_num
from (select t.*,
             lag(price) over (partition by id order by dt) as prev_price
      from t
     ) t