如风的爱的gravatar头像
如风的爱2017-07-19 19:02:57
sql查询连续日期及连续的天数
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
<span style="color:rgb(69, 69, 69); font-size:14px">一句sql实现</span>
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 行受影响)
*/

 


打赏

分享到:

最近浏览
smile20172月16日
最代码贡献等级说明
aa9854057152月5日
最代码贡献等级说明
wgc_jy2月2日
暂无贡献等级
pengboss2月2日
暂无贡献等级
夏虫123zzc1月11日
最代码贡献等级说明
137163968612017年11月25日
暂无贡献等级
weienqing2017年11月17日
最代码贡献等级说明
tuyong2017年10月16日
最代码贡献等级说明
wcy55552017年9月22日
最代码贡献等级说明
4608281732017年9月19日
最代码贡献等级说明
2037785132017年9月13日
最代码贡献等级说明
fengshao0072017年9月7日
暂无贡献等级
q28238652017年9月6日
暂无贡献等级
182028382082017年9月3日
暂无贡献等级
curt201709022017年9月2日
暂无贡献等级
branice2017年9月2日
最代码贡献等级说明
junwuxie2017年9月1日
最代码贡献等级说明
马小跳2017年8月29日
暂无贡献等级
打豆豆2017年8月23日
暂无贡献等级
cxycxy2017年8月21日
最代码贡献等级说明
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友