合并 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;
我正在尝试删除 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;