Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да намерите записи с рекурсивно припокриващи се диапазони от дати в Oracle DB

Можете да присвоите групов идентификатор на записите. Идеята е да намерите записи, които не се припокриват, и да ги използвате като начало на група.

Следното присвоява групите към всеки запис:

  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

Ако искате само групите за определен запис, тогава има няколко начина, като например:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извика функция Oracle в Python?

  2. Извличане на структура на таблица с динамичен SQL

  3. Заявка за актуализиране на Oracle с обединения

  4. Oracle ListaGG, Топ 3 най-често срещани стойности, дадени в една колона, групирани по ID

  5. Списък с територии, поддържани от базата данни на Oracle