इसे भी आजमाएं। मैंने इसे सबसे अच्छा परीक्षण किया, मेरा मानना है कि यह सभी संभावनाओं को शामिल करता है, जिसमें आसन्न अंतराल को जोड़ना शामिल है (10:15 से 10:30 और 10:30 से 10:40 को एक अंतराल में जोड़ा जाता है, 10:15 से 10:40 ) यह भी काफी तेज होना चाहिए, यह ज्यादा उपयोग नहीं करता है।
with m as
(
select ip_address, start_time,
max(stop_time) over (partition by ip_address order by start_time
rows between unbounded preceding and 1 preceding) as m_time
from ip_sessions
union all
select ip_address, NULL, max(stop_time) from ip_sessions group by ip_address
),
n as
(
select ip_address, start_time, m_time
from m
where start_time > m_time or start_time is null or m_time is null
),
f as
(
select ip_address, start_time,
lead(m_time) over (partition by ip_address order by start_time) as stop_time
from n
)
select * from f where start_time is not null
/