Đây là một dạng của khoảng trống và đảo. Trong trường hợp này, hãy xác định vị trí các hòn đảo bắt đầu bằng cách tìm kiếm các điểm chồng chéo ở phần đầu. Sau đó, thực hiện tổng tích lũy của các lần bắt đầu và tổng hợp:
select max(id), min(start), max(end), max(created_at)
from (select t.*,
count(*) filter (where max_end < end) over (order by start) as grouping
from (select t.*,
max(end) over (order by start rows between unbounded preceding and 1 preceding) as max_end
from events t
) t
) t
group by grouping;