Zitat:
Zitat von Aruthar
Mir würde auch die Maximale Anzahl an Überschneidungen pro Tag reichen :)
|
Also, ich würde das ja gleich als Timestamp-Range speichern, z.B. so:
Code:
test=*# select * from zeiten ;
id | von_bis
----+-----------------------------------------------
1 | ["2014-12-22 10:00:00","2014-12-22 12:00:00")
2 | ["2015-01-15 10:00:00","2015-01-15 12:00:00")
3 | ["2015-01-15 11:00:00","2015-01-15 14:00:00")
(3 rows)
Und nun schauen, was sich überschneidet:
Code:
test=*# select z1.id, z1.von_bis, z2.id, z2.von_bis, case when z1.von_bis && z2.von_bis then 1 else 0 end from zeiten z1 cross join zeiten z2 where z1.id != z2.id and z1.id < z2.id;
id | von_bis | id | von_bis | case
----+-----------------------------------------------+----+-----------------------------------------------+------
1 | ["2014-12-22 10:00:00","2014-12-22 12:00:00") | 2 | ["2015-01-15 10:00:00","2015-01-15 12:00:00") | 0
1 | ["2014-12-22 10:00:00","2014-12-22 12:00:00") | 3 | ["2015-01-15 11:00:00","2015-01-15 14:00:00") | 0
2 | ["2015-01-15 10:00:00","2015-01-15 12:00:00") | 3 | ["2015-01-15 11:00:00","2015-01-15 14:00:00") | 1
(3 rows)
In der letzten Spalte siehst Du bei 1 eine Überschneidung. Das kannst Du nun weiter auswerten.