sql >> Databasteknik >  >> RDS >> Oracle

Hur man hittar poster med rekursivt överlappande datumintervall i Oracle DB

Du kan tilldela en gruppidentifierare till posterna. Tanken är att hitta poster som inte överlappar varandra och använda dem som början på en grupp.

Följande tilldelar grupperna till varje 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

Om du bara vill ha grupperna för en viss post så finns det flera sätt, 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. Alternativ lösning till DCount och DLookup med MS SQL Server Backend

  2. Vad är salt när det gäller MYSQL sha1?

  3. Varning:mysqli_connect():(28000/1045):Åtkomst nekad för användaren

  4. Hur man skapar ett serverlöst GraphQL API för MySQL, Postgres och Aurora