sql >> Database >  >> RDS >> Oracle

Datumbereiken samenvoegen

Werknemer A heeft twee rijen voor 01-07-2013 t/m 08-10-2014; Ik nam aan dat dit een vergissing was en ik heb een van de rijen verwijderd.

Afgezien daarvan is dit een toepassing van de "tabibitosan-methode" voor het oplossen van problemen met "gaten en eilanden" voor datumbereiken. De truc zit hem in het maken van de "groepen" (gp ) voor aangrenzende intervallen.

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. stuur REFCURSOR type variabele naar Oracle Stored procedure vanuit Java

  2. UUID's als binair invoegen en selecteren (16)

  3. django.db.utils.IntegrityError:dubbele sleutelwaarde schendt unieke beperking spirit_category_category_pkey

  4. Verkennen van wachtopties voor vergrendeling met lage prioriteit in SQL Server 2014 CTP1