Sie können den Datensätzen eine Gruppenkennung zuweisen. Die Idee ist, Datensätze zu finden, die sich nicht überschneiden, und sie als Anfang einer Gruppe zu verwenden.
Im Folgenden werden die Gruppen jedem Datensatz zugewiesen:
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
Wenn Sie die Gruppen nur für einen bestimmten Datensatz haben möchten, gibt es mehrere Möglichkeiten, wie zum Beispiel:
with overlaps as (
<query above>
)
select o.*
from overlaps o
where o.grp = (select o2.grp from overlaps o2 where o2.id = ???);