SQL Server:如何比较重叠日期区间并按最高价输出分段区间
分组内重叠日期区间的最高价分段区间求解
需求说明
在分组内比较多个重叠的日期区间,输出各时段内对应最高价的分段区间。
示例数据
对应的数据如下,已整理为SQL代码:
DROP TABLE IF EXISTS #TestTable; CREATE TABLE #TestTable ( ID Varchar(11), Place Varchar(50), Price Bigint, DateStart Date, DateEnd Date ); INSERT INTO #TestTable (ID, Place, Price, DateStart, DateEnd) VALUES (1, 'OnePlace', 100, '2023-01-01', '2023-05-01'), (1, 'AnotherPlace', 150, '2023-02-01', '2023-06-01'), (1, 'YetAnotherPlace', 200, '2023-03-01', '2023-04-01'), (2, 'YetAnotherPlace', 200, '2023-01-01', '2023-04-01'), (2, 'OnePlace', 100, '2023-03-01', '2023-06-01'); SELECT * FROM #TestTable;
期望输出
期望得到按ID分组后,每个分段日期区间对应的最高价格结果:
- ID=1的分段结果:
- 2023-01-01 至 2023-02-01:最高价100
- 2023-02-01 至 2023-03-01:最高价150
- 2023-03-01 至 2023-04-01:最高价200
- 2023-04-01 至 2023-05-01:最高价150
- 2023-05-01 至 2023-06-01:最高价150
- ID=2的分段结果:
- 2023-01-01 至 2023-03-01:最高价200
- 2023-03-01 至 2023-04-01:最高价200
- 2023-04-01 至 2023-06-01:最高价100
遇到的问题
ID=2的简单重叠场景已找到解决方案,但ID=1的复杂重叠场景(三个区间互相交叉:100的区间覆盖1-5月,150的覆盖2-6月,200的覆盖3-4月)尚未找到合适的解决办法。曾尝试使用合并日期区间的CTE方案,但无法调整该方案以输出符合需求的分段区间。
内容的提问来源于stack exchange,提问作者user6610400
相关产品推荐
相关产品推荐

