Combine consecutive date ranges

前端 未结 4 549
礼貌的吻别
礼貌的吻别 2020-12-06 12:28

Using SQL Server 2008 R2,

I\'m trying to combine date ranges into the maximum date range given that one end date is next to the following start date.

The da

4条回答
  •  一向
    一向 (楼主)
    2020-12-06 13:30

    SET NOCOUNT ON
    
    DECLARE @T TABLE(ID INT,FromDate DATETIME, ToDate DATETIME)
    
    INSERT INTO @T(ID,FromDate,ToDate)
    SELECT 1,'20090801','20090803' UNION ALL
    SELECT 2,'20090802','20090809' UNION ALL
    SELECT 3,'20090805','20090806' UNION ALL
    SELECT 4,'20090812','20090813' UNION ALL
    SELECT 5,'20090811','20090812' UNION ALL
    SELECT 6,'20090802','20090802'
    
    
    SELECT ROW_NUMBER() OVER(ORDER BY s1.FromDate) AS ID,
           s1.FromDate, 
           MIN(t1.ToDate) AS ToDate 
    FROM @T s1 
    INNER JOIN @T t1 ON s1.FromDate <= t1.ToDate 
      AND NOT EXISTS(SELECT * FROM @T t2 
                     WHERE t1.ToDate >= t2.FromDate
                       AND t1.ToDate < t2.ToDate) 
    WHERE NOT EXISTS(SELECT * FROM @T s2 
                     WHERE s1.FromDate > s2.FromDate
                       AND s1.FromDate <= s2.ToDate) 
    GROUP BY s1.FromDate 
    ORDER BY s1.FromDate
    

提交回复
热议问题