sql >> Database teknologi >  >> RDS >> Oracle

Sådan finder du poster med rekursivt overlappende datointervaller i Oracle DB

Du kan tildele en gruppe-id til posterne. Ideen er at finde poster, der ikke overlapper hinanden, og bruge dem som begyndelsen på en gruppe.

Følgende tildeler grupperne til hver post:

select t.*, sum(group_start) over (order by dstart) as grp from (select t.*, (case when not exists (select 1 from t t2 where t2.dstart < t.dstart and t2.dend >= t.dstart ) then 1 else 0 end) group_start from t ) t

Hvis du kun vil have grupperne for en bestemt post, er der flere måder, såsom:

with overlaps as (
      <query above>
     )
select o.*
from overlaps o
where o.grp = (select o2.grp from overlaps o2 where o2.id = ???);
 



  1. MySQL navngivningskonventioner, skal feltnavnet indeholde tabelnavnet?

  2. Sådan aktiveres/deaktiveres CHECK-begrænsninger i SQLite

  3. Hvordan får man det samlede antal tabeller i postgresql?

  4. FEJL:Indlæsning af lokale data er deaktiveret - dette skal være aktiveret på både klient- og serversiden