找到连续的日期范围

时间:2019-08-08 06:15:36

标签: sql sql-server

如何从以下情况中找到连续的日期范围?

Id  modifiedDate  StartDate   EndDate
1   2019-01-01    2019-01-01  2019-12-31
1   2019-02-02    2019-02-01  2019-02-28
1   2019-02-27    2019-01-15  2019-03-15
1   2019-03-01    2019-03-01  2019-03-12
2   2019-01-01    2019-01-01  2019-03-01
2   2019-05-01    2019-05-01  2019-08-01

我要显示的输出是:

   Id  StartDate    EndDate
   1   2019-01-01   2019-01-15
   1   2019-01-15   2019-02-01
   1   2019-02-01   2019-02-28
   1   2019-02-28   2019-03-01
   1   2019-03-01   2019-03-12
   1   2019-03-12   2019-03-15
   1   2019-03-15   2019-12-31
   2   2019-01-01   2019-03-01
   2   2019-05-01   2019-08-01

到目前为止,我尝试过的是:

With X As(
  Select a.StartDate,a.EndDate,b.StartDate,b.EndDate
  From table a Full Join table b ON a.endDate>b.StartDate
  Where a.StartDate<>b.StartDate and b.endDate<>a.Enddate
)
Select StartDate,Enddate,Min(StartDtae)
From X
Group By StartDate,EndDate

对于第一个ID,我可以进行合并和修复,但是对于第二个ID,我无法遵循合并过程来显示所需的输出。

1 个答案:

答案 0 :(得分:0)

您可以尝试这个。

WITH CTE
AS
(
    SELECT DISTINCT id,Date, ROW_NUMBER() OVER(PARTITION BY id ORDER BY Date) RN
    FROM
    (
        SELECT Id,StartDate Date FROM your_table
        UNION ALL
        SELECT Id,EndDate  FROM your_table
    ) A
)

SELECT A.Id, A.Date StartDate,B.Date EndDate 
FROM CTE A
INNER JOIN CTE B ON A.Id = B.Id AND A.RN = B.RN - 1