sql找出连续日期和连续数字

来源:互联网 发布:《企业的大数据战略》 编辑:程序博客网 时间:2024/04/30 09:30

tips:

1 代码在sqlserver2005实现,其他数据需要经过修改

2 计算连续时间和连续数字是同一类问题,所以合起来一起说,计算连续时间的时候只不过将时间转换成数字而已

3 此方法相对高效


第一步

构造数据

create table #tmptable(id int identity(1,1),rq smalldatetime)
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')

第二步

临时中间表

select id,rq,datediff(d,(select min(rq) from #tmptable),rq)+1 idd into #tp from

第三步

select y.rq,x.rq,datediff(d,y.rq,x.rq)+1 dtdf from
(
    select  min(a.idd) as minid, max(a.idd) as maxid
    from
    (
        select   idd, (idd - row_number() over(order by idd asc)) id_diff
        from
        #tp c
    ) a
    group by a.id_diff
) z
left join #tp y
on z.minid=y.idd
left join #tp x
on z.maxid=x.idd



原创粉丝点击