sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo eliminar eventos superpuestos parcial/totalmente con marcas de tiempo de inicio y finalización de la salida de la consulta?

Esta es una forma de lagunas e islas. En este caso, determine dónde comienzan las islas buscando superposiciones al principio. Luego, haga una suma acumulativa de los inicios y la agregación:

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;