【问题标题】:Combine overlapping date ranges in SQL Server在 SQL Server 中合并重叠的日期范围
【发布时间】:2011-08-10 17:41:05
【问题描述】:

我有一个表,其中包含数百万行,要求日期跨度与某个“合同编号”和“服务代码”不重叠。通常有 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。它在数据子集下工作,但是一旦我在我拥有的所有数据上释放它,它就真的很慢。我需要在几分钟内运行数百万行的东西。有什么想法吗?

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    在这些问题上花费了很多时间,我认为保持数据干净、没有重叠比从大表中消除它们更有效。约束使我们能够有效地做到这一点:Contiguous Time Periods

    【讨论】:

    • 您的建议并不能真正解决我的问题。我显然知道清理数据是最好的选择,但业务需求阻止了我这样做。
    • @rwponu:祝你好运,但据我所知,没有快速简便的解决方案。 Adam Machanic 在这种情况下推荐了 CLR,但他说他需要编写大量复杂的 C# 代码来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2017-12-07
    相关资源
    最近更新 更多