SQL Server - cumulative sum on overlapping data - getting date that sum reaches a given value

后端 未结 3 1627
一整个雨季
一整个雨季 2021-01-19 01:52

In our company, our clients perform various activities that we log in different tables - Interview attendance, Course Attendance, and other general activities. I have a data

3条回答
  •  南笙
    南笙 (楼主)
    2021-01-19 02:00

    See SQL Fiddle here.

    with tbl as (
      -- this will generate daily merged ovelaping time
      select distinct
        a.id
        ,(
            select min(x.starttime) 
            from act x 
            where x.id=a.id and ( x.starttime between a.starttime and a.endtime
              or a.starttime between x.starttime and x.endtime )
        ) start1
        ,(
            select max(x.endtime) 
            from act x 
            where x.id=a.id and ( x.endtime between a.starttime and a.endtime
              or a.endtime between x.starttime and x.endtime )
        ) end1
      from act a
    
    ), tbl2 as 
    (
      -- this will add minute and total minute column
      select 
        * 
        ,datediff(mi,t.start1,t.end1) mi
        ,(select sum(datediff(mi,x.start1,x.end1)) from tbl x where x.id=t.id and x.end1<=t.end1) totalmi
      from tbl t
    ), tbl3 as 
    (
      -- now final query showing starttime and endtime for 5 hours other wise null in case not completed 5(300 minutes) hours
      select 
        t.id
        ,min(t.start1) starttime
        ,min(case when t.totalmi>300 then t.end1 else null end) endtime
      from tbl2 t
      group by t.id
    )
    -- final result 
    select *
    from tbl3
    where endtime is not null
    

提交回复
热议问题