牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2017-07-27 投稿人: 浏览次数:720

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



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。