sql >> Database >  >> RDS >> PostgreSQL

Overlappende tijdsintervallen samenvoegen, hoe?

Je kunt deze vraag ook proberen (nog een keer oplossingen naast die gegeven door PM 77-1 in de opmerking hierboven) :

WITH RECURSIVE cte( id, date_start, date_end ) AS
(
  SELECT id, date_start, date_end
  FROM evento
  UNION 
  SELECT e.id,
         least( c.date_start, e.date_start ),
         greatest( c.date_end, e.date_end )
  FROM cte c
  JOIN evento e
  ON e.date_start between c.date_start and c.date_end
     OR 
     e.date_end between c.date_start and c.date_end
)
SELECT distinct date_start, date_end
FROM (
  SELECT id, 
         min( date_start) date_start, 
         max( date_end ) date_end
  FROM cte
  GROUP BY id
) xx
ORDER BY date_start;

Demo ---> http://www.sqlfiddle.com/#!12/ bdf7e/9

Voor een enorme tabel kan de prestatie van deze query echter verschrikkelijk traag zijn, en een procedurele aanpak zou beter kunnen presteren.




  1. Hoe pak je een willekeurig item uit een database in Django/postgreSQL?

  2. Opgeslagen procedures en functies retourneren in een SQL Server-database:ROUTINES (T-SQL-voorbeelden)

  3. Exporteren naar csv/excel-manier om voorloopnul op te nemen

  4. Hoe postgres incrementele updates opvragen sinds een bepaald punt (een tijdstempel of een transactie-ID)?