2011-03-18 47 views
2

我的日期如何使用sql设置一个日期范围?

Dates 
2011-03-01 00:00:00.000 
2011-03-03 00:00:00.000 
2011-03-07 00:00:00.000 
2011-03-08 00:00:00.000 
2011-03-13 00:00:00.000 
2011-03-14 00:00:00.000 
2011-03-15 00:00:00.000 

如何转换这个日期在一个日期范围内像下面

我需要这样的

Date_from     Date_to 
2011-03-01 00:00:00.000 2011-03-01 00:00:00.000 
2011-03-03 00:00:00.000 2011-03-03 00:00:00.000 
2011-03-07 00:00:00.000 2011-03-08 00:00:00.000 
2011-03-13 00:00:00.000 2011-03-15 00:00:00.000 
+0

输出第一个范围不应该是第一个 - 第3个,而不是第1个 - 第1个和第3个 - 第3个? – 2011-03-18 22:21:02

+0

此外,您如何定义哪些日期被视为范围的第一个/最后一个?例如,为什么不是第3-7个范围?为什么最终的范围是13-15而不是13-14,14-15? – 2011-03-18 22:22:29

+0

陈述你的关系请! (正如我请求你的上一个问题......) – 2011-03-18 22:23:05

回答

2

的SQL Server 2005+

;WITH cte 
    AS (SELECT *, 
       DATEDIFF(DAY, 0, Dt) - 
         DENSE_RANK() OVER (ORDER BY DATEDIFF(DAY,0,Dt) ) AS Grp 
     FROM Dates) 
SELECT MIN(Dt) AS Date_from, 
     MAX(Dt) AS Date_to 
FROM cte 
GROUP BY Grp