在SQL Server中组合重叠的日期范围

时间:2011-08-10 17:41:05

标签: sql-server sql-server-2008

我有一个包含数百万行的表,要求日期跨度与某个“合同号”和“服务代码”不重叠。通常有2-4行,日期重叠,必须合并为一个记录。不应重叠不重叠的记录,并应保持差距。

ContractNumber     ServiceCode      StartDate      EndDate
1111111            AFL              2010-01-01     2010-12-31
1111111            AFL              2011-01-01     2011-12-31
1111111            AFL              2011-04-01     2012-03-31
1111111            AFL              2011-04-01     2012-06-30
1111111            AFL              2013-01-01     2013-12-31

必须将它们组合成:

ContractNumber     ServiceCode      StartDate      EndDate
1111111            AFL              2010-01-01     2010-12-31   (remains the same)
1111111            AFL              2011-01-01     2012-06-30   (merged)
1111111            AFL              2013-01-01     2013-12-31   (gap maintained)

另外,我已经看过这个问题:Eliminate and reduce overlapping date ranges。它在一个数据子集下工作,但是一旦我在我拥有的所有数据上释放它,它就会非常缓慢。我需要在几分钟内运行数百万行的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

花了很多时间在这些问题上,我认为保持数据清洁,没有重叠比从大表中消除它们更有效。约束允许我们有效地做到:Contiguous Time Periods