PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment supprimer les événements qui se chevauchent partiellement/entièrement avec les horodatages de début et de fin de la sortie de la requête ?

C'est une forme de vides et d'îlots. Dans ce cas, déterminez où les îles commencent en recherchant les chevauchements au début. Ensuite, faites une somme cumulée des démarrages et de l'agrégation :

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;