合并 SQL 服务器中的连续重复行

Merge consecutive duplicate rows in SQL Server

我正在尝试删除 SQL 服务器 table 中的一些数据,但我找不到解决方案,所以我希望有人能提供帮助。我搜索了答案,大多数人似乎都说这是一个 "Islands and Gaps" 问题,但我无法调整我看到的解决方案以适应我的情况。

这是我正在使用的源数据的示例

如果连续行的价格相同,我想将它们合并到一行中,整体有效起始日期和截止日期。

我试过使用 PARTITION OVER 子句,但它似乎总是将所有相同的价格组合在一起,即使中间有另一个价格,而且似乎忽略了 ORDER BY 部分分区.

有什么想法吗?

您可以使用 row_number()s & 找到要聚合的组:

select item, price, min(validfrom) as validfrm, max(validto) as valdto
from (select t.*, 
             row_number() over(partition by item order by validfrom desc) as seq1,
             row_number() over(partition by item, price order by validfrom desc) as seq2
      from table t
     ) t
group by item, price, (seq1 - seq2)
order by item, validfrm desc;