グループ ID をレコードに割り当てることができます。アイデアは、重複しないレコードを見つけて、それらをグループの始まりとして使用することです.
以下は、各レコードにグループを割り当てます:
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 = ???);
プレ>