आप रिकॉर्ड के लिए समूह पहचानकर्ता असाइन कर सकते हैं। विचार उन अभिलेखों को ढूंढना है जो ओवरलैप नहीं करते हैं, और उन्हें समूह की शुरुआत के रूप में उपयोग करते हैं।
निम्नलिखित प्रत्येक रिकॉर्ड के लिए समूह निर्दिष्ट करता है:
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 = ???);