Hallo Ilja,
leider gibt das pro Datum nur einen Satz zurück, mit dem Anfang des jeweils ersten und dem Ende des jeweils letzten Termins.
Ich habe gerade noch folgendes ausprobiert:
SELECT a.date AS `Datum`,
(
SELECT MIN(b.begin) FROM termine AS `b`
WHERE b.begin >= a.begin
AND b.end >= a.end
AND b.begin <= a.end
AND b.date = a.date
) AS `Anfang`,
(
SELECT MAX(c.end) FROM termine AS `c`
WHERE c.begin >= a.begin
AND c.end >= a.end
AND c.begin <= a.end
AND c.date = a.date
) AS `Ende`
FROM termine AS `a`
GROUP BY `Ende`
ORDER BY a.date, a.begin
Das funtkioniert aber auch nur bei zwei überlappenden Terminen.
Man bräuchte ein(e) 'WHILE'-Statement/-Funktion oder etwas in der Art, da man sonst pro potentieller Überlappung ein weiteres Subselect einbauen müsste.
Unglaublich, wie schwer eine auf den ersten Blick so einfach erscheinende Aufgabe teilweise umzusetzen ist.
schöne Grüße,
David