इस समस्या को हल करने का एक तरीका यहां दिया गया है। एक फ़्लैग बनाएं जो यह निर्धारित करे कि कोई एक रिकॉर्ड नहीं करता है या नहीं पिछले एक के साथ ओवरलैप करें। यह एक समूह की शुरुआत है। फिर इस ध्वज का संचयी योग लें और उसे समूहबद्ध करने के लिए उपयोग करें:
select user_id, min(begin_at) as begin_at, max(end_at) as end_at
from (select s.*, sum(startflag) over (partition by user_id order by begin_at) as grp
from (select s.*,
(case when lag(end_at) over (partition by user_id order by begin_at) >= begin_at
then 0 else 1
end) as startflag
from slots s
) s
) s
group by user_id, grp;
यहां एक SQL Fiddle है।