कर्मचारी ए की 07-01-2013 से 08-10-2014 तक दो पंक्तियाँ हैं; मुझे लगा कि यह एक गलती है और मैंने एक पंक्ति को हटा दिया है।
इसके अलावा, यह दिनांक सीमाओं के लिए "अंतराल और द्वीप" समस्याओं को हल करने के लिए "टैबिबिटोसन विधि" का एक अनुप्रयोग है। चाल "समूह" बनाने में है (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