轉自:http://bbs.csdn.net/topics/360019248
如何取到每段連續日期的起始終止日期以及持續天數及起始日期距上一期終止日期的天數,能否用一句sql實現?
備注:數據庫環境是sql server 2000
create table tmptable(rq datetime) go insert tmptable values('2010.1.1') insert tmptable values('2010.1.2') insert tmptable values('2010.1.3') insert tmptable values('2010.1.6') insert tmptable values('2010.1.7') insert tmptable values('2010.1.10') insert tmptable values('2010.1.11') insert tmptable values('2010.1.12') insert tmptable values('2010.1.19') insert tmptable values('2010.1.20') insert tmptable values('2010.1.22') insert tmptable values('2010.1.23') insert tmptable values('2010.1.28') go ---希望得到的結果 --本期起始日期 本期終止日期 持續天數 距上一期天數 --2010.1.1 2010.1.3 3 0 --2010.1.6 2010.1.7 2 3 --2010.1.10 2010.1.12 3 3 --2010.1.19 2010.1.20 2 7 --2010.1.22 2010.1.23 2 2 --2010.1.28 2010.1.28 1 5 drop table tmptable go
一句sql實現
select 本期起始日期=min(rq),本期終止日期=max(rq),持續天數=max(id1)-min(id1)+1, 距上一期天數=case a.id1-a.id2 when -1 then 0 else max(datediff(d,rq2,rq)) end from ( select id1=datediff(d,'2010-01-01',rq),id2=(select count(1) from tmptable where rq <= a.rq),rq2=(select max(rq) from tmptable where rq < a.rq),* from tmptable a ) a group by a.id1-a.id2 /* 本期起始日期 本期終止日期 持續天數 距上一期天數 ----------------------- ----------------------- ----------- ----------- 2010-01-01 00:00:00.000 2010-01-03 00:00:00.000 3 0 2010-01-06 00:00:00.000 2010-01-07 00:00:00.000 2 3 2010-01-10 00:00:00.000 2010-01-12 00:00:00.000 3 3 2010-01-19 00:00:00.000 2010-01-20 00:00:00.000 2 7 2010-01-22 00:00:00.000 2010-01-23 00:00:00.000 2 2 2010-01-28 00:00:00.000 2010-01-28 00:00:00.000 1 5 警告: 聚合或其他 SET 操作消除了空值。 (6 行受影響) */