従業員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