22,209
社区成员
发帖
与我相关
我的任务
分享
if object_id('tempdb..#tab') is not null drop table #tab
CREATE TABLE #tab
(
date_ datetime,
)
INSERT INTO #tab
SELECT '2016-06-02' UNION ALL
SELECT '2016-06-03' UNION ALL
SELECT '2016-06-04' UNION ALL
SELECT '2016-06-08' UNION ALL
SELECT '2016-06-09' UNION ALL
SELECT '2016-06-10' UNION ALL
SELECT '2016-06-13' UNION ALL
SELECT '2016-06-14' UNION ALL
SELECT '2016-06-16'
SELECT * FROM #tab
--如何查询出下面的结果
/*
startdate enddate
2016-06-02 00:00:00.000 2016-06-04 00:00:00.000
2016-06-08 00:00:00.000 2016-06-10 00:00:00.000
2016-06-13 00:00:00.000 2016-06-14 00:00:00.000
2016-06-16 00:00:00.000 2016-06-16 00:00:00.000
*/
SELECT
MIN(t.date_) AS StartDate
,MAX(t.date_) AS EndDate
FROM
(SELECT *,grp=DATEADD(dd,-ROW_NUMBER()OVER(ORDER BY date_),date_) FROM #tab) AS t GROUP BY grp
select 'startdate'=min(date_),
'enddate'=max(date_)
from (select date_,rn=datediff(d,'1970-01-01',date_)-row_number() over(order by date_)
from #tab) t
group by rn
/*
startdate enddate
----------------------- -----------------------
2016-06-02 00:00:00.000 2016-06-04 00:00:00.000
2016-06-08 00:00:00.000 2016-06-10 00:00:00.000
2016-06-13 00:00:00.000 2016-06-14 00:00:00.000
2016-06-16 00:00:00.000 2016-06-16 00:00:00.000
(4 row(s) affected)
*/