sql >> Databáze >  >> RDS >> Oracle

Jak najít záznamy s rekurzivně se překrývajícími rozsahy dat v Oracle DB

Záznamům můžete přiřadit identifikátor skupiny. Cílem je najít záznamy, které se nepřekrývají, a použít je jako začátek skupiny.

Následující přiřadí skupiny ke každému záznamu:

  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

Pokud chcete skupiny pouze pro určitý záznam, pak existuje několik způsobů, jako například:

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



  1. Naplnění kalendáře kódem PHP foreach

  2. Schéma databáze pro knihy, autory, vydavatele a uživatele s policemi

  3. Jak připojit aplikaci C# Windows mobile 6.5 k databázi Postgres?

  4. SELECT * z SQL tabulky pomocí připraveného příkazu