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

日付範囲をマージする

    従業員Aには、2013年7月1日から2014年8月10日までの2つの行があります。それは間違いだと思い、行の1つを削除しました。

    それ以外は、日付範囲の「ギャップと島」の問題を解決するための「タビビトサン法」の応用です。秘訣は「グループ」(gp)を作成することです )隣接する間隔の場合。

    with
         prep ( id, st_dt, end_dt, gp, pos, locn, status ) as (
           select id, st_dt, end_dt, 
                  end_dt - sum( end_dt - st_dt + 1 ) over (partition by id, pos, locn, status 
                                                           order by st_dt),
                  pos, locn, status
           from   asgn
         )
    select id, min(st_dt) as st_dt, max(end_dt) as end_dt, pos, locn, status
    from   prep
    group by id, gp, pos, locn, status
    order by id, st_dt
    ;
    
    
    
    ID         ST_DT      END_DT     POS        LOCN           STATUS
    ---------- ---------- ---------- ---------- ---------- ----------
    A          12-31-2006 08-16-2009 CLERK      LAX                 3
    A          08-17-2009 10-04-2009 CLERK      LAX                 0
    A          10-05-2009 04-09-2013 OPR        NYC                 3
    A          04-10-2013 08-10-2014 CLERK      LAX                 3
    B          04-10-2013 05-31-2013 SUP        LAX                 3
    B          06-01-2013 06-30-2014 SUP        LAX                 0
    B          07-01-2013 08-10-2014 SUP        LAX                 3
    B          08-11-2014 08-11-2014 CLERK      NYC                 3
    B          08-12-2014 02-10-2016 SUP        LAX                 3
    B          02-11-2016 08-12-2016 OPER       SFO                 3
    
     10 rows selected 
    



    1. varcharとcharを比較する

    2. Node.js+MySQL-トランザクションの処理

    3. SQL-右括弧がありません

    4. MYSQL:JOINはSUMを2倍にします