PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como remover eventos parcialmente/totalmente sobrepostos com carimbos de data/hora de início e término da saída da consulta?


Esta é uma forma de lacunas e ilhas. Nesse caso, determine onde as ilhas começam procurando por sobreposições no início. Em seguida, faça uma soma cumulativa dos inícios e da agregação:
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;