sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - kumulativ summa på överlappande data - få det datum då summan når ett givet värde

Se SQL Fiddle här .

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


  1. Hur beräknar man multiplikationsvärdet inuti while-loopen i PHP?

  2. KNIME

  3. ALTER TABLE-satsen kom i konflikt med CHECK-begränsningen i SQL Server - SQL Server / TSQL självstudie del 89

  4. Vad är skillnaden mellan ta bort från table_a och trunkate table table_a i MySQL?