sql >> データベース >  >> RDS >> Sqlserver

SQL Server - 重複データの累積合計 - 合計が特定の値に達する日付の取得

    SQL Fiddle こちら を参照してください .

    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. MySQL FULL JOIN?

    2. SQLite Strftime()関数の有効なフォーマット文字列置換

    3. HibernateDB接続プーラーc3p0に問題があります

    4. LiquibaseスクリプトはORA-01843を返します:有効な月ではありません