首页 > 解决方案 > 有没有办法根据某些值将行分成组?

问题描述

考虑这张表:

在此处输入图像描述

我想根据它们的 id 和 price 值将这些行分成组:只要两行具有相同的 id 和 price并且不被属于同一组的任何其他行划分,所以我希望输出是 sorta像这样:

在此处输入图像描述

我尝试使用窗口函数,但最后一行与前 3 行具有相同的组。我缺少什么吗?

标签: sqlgroupingwindow-functions

解决方案


这是一个差距和孤岛问题。一种方法是使用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

推荐阅读