我一直在尝试各种各样的事情,但我无法解决这个问题。我的搜索中没有看到相同的问题。
我有一个包含多个日期范围的表,我需要获得连续的,而不是重叠的。例如:
表:
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。
答案 0 :(得分:0)
根据你的陈述, “由于最近的那些是7/1 - 6/30,我不希望结果中有任何1/1 - 12/31范围。”
我认为这是你想要的结果。
SELECT MAX(StartDate) AS MostRecentStartDate
,MAX(EndDate) AS MostRecentEndDate
FROM myTable
将此作为您的内部查询并加入您的表格。只有匹配Month
StartDate
和Month
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)