获取重叠日期范围的连续日期范围

时间:2015-11-11 05:34:31

标签: sql sql-server tsql

我一直在尝试各种各样的事情,但我无法解决这个问题。我的搜索中没有看到相同的问题。

我有一个包含多个日期范围的表,我需要获得连续的,而不是重叠的。例如:

表:

Company | StartDate  | EndDate
---------------------------------
A       | 2014-07-01 | 2015-06-30
A       | 2013-07-01 | 2014-06-30
A       | 2013-01-01 | 2013-12-31
A       | 2012-07-01 | 2013-06-30
A       | 2012-01-01 | 2012-12-31

期望的结果:

Company | StartDate  | EndDate
---------------------------------
A       | 2014-07-01 | 2015-06-30
A       | 2013-07-01 | 2014-06-30
A       | 2012-07-01 | 2013-06-30

我们基本上有财政年度和历年。我希望我的结果集基于最新的日期集。由于最近的是7/1 - 6/30,我不希望结果中有任何1/1 - 12/31范围。我不能像WHERE MONTH(EndDate)=6那样硬编码,因为在现实生活中,财政年度的开始和结束可能会有很大差异。我不能EndDate + 1 = StartDate,因为旧日历年将使新日历年适合该集。

我对此数据库的访问权限有限,因此我无法编写SP或临时表。这适用于SQL Server 2008。

1 个答案:

答案 0 :(得分:0)

根据你的陈述, “由于最近的那些是7/1 - 6/30,我不希望结果中有任何1/1 - 12/31范围。”

我认为这是你想要的结果。

SELECT MAX(StartDate) AS MostRecentStartDate
      ,MAX(EndDate) AS MostRecentEndDate
FROM myTable

将此作为您的内部查询并加入您的表格。只有匹配Month StartDateMonth EndDate的人才会返回。

SELECT * FROM myTable AS tb
INNER JOIN
    (SELECT MAX(StartDate) AS MostRecentStartDate
           ,MAX(EndDate) AS MostRecentEndDate
     FROM myTable
     ) AS src
ON MONTH(tb.StartDate) = MONTH(src.MostRecentStartDate)
AND MONTH(tb.EndDate) = MONTH(src.MostRecentEndDate)