【问题标题】:SQL query remove Overlapping Start And EndDatesSQL查询删除重叠的开始和结束日期
【发布时间】:2013-12-16 05:55:34
【问题描述】:

我有如下表的开始日期和结束日期行。

START Date |    END Date
2013-01-01 |    2013-09-30
2013-01-01 |    2013-12-31
2013-10-01 |    2013-12-31
2014-01-01 |    2099-12-31

想要的结果是

START Date |    END Date
2013-01-01 |    2013-09-30
2013-10-01 |    2013-12-31
2014-01-01 |    2099-12-31

我需要一个查询来删除具有重叠日期的重复行。查询需要保留日期范围较小的行,在上面的示例中,查询应删除开始日期为 2013 年 1 月 1 日和结束日期为 2013 年 12 月 31 日的行。

我使用的是 SQL Server 2008。递归 CTE,row_number() 函数可用于编写查询。

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:
    with cte
    As
    (
    Select Row_Number() Over(Partition By [Start DATE]
                             Order By Datediff(dd,[Start Date],[End Date]) Asc
    ) as RNo, [Start Date], [End Date]  from yourtablename )
    Select [Start Date],[End Date] from Cte where RNo =1;
    

    【讨论】: