Ilja: Termintabelle: Überlappende Termine zusammenfassen

Beitrag lesen

yo,

Das Problem ist, dass wenn man der Selektionsbedingung AND tab2.begin <= tab1.end hinzufügt, nur "direkte" Überlappungen berücksichtigt werden, aber nicht z.B. drei direkt hintereinanderliegende Termine (oder Termine, die sich "an den Rändern" überschneiden, die aber nicht alle "in den ersten Termin hineinragen").

ja, das ist ein problem, wir haben verkettungen von terminen. deswegen habe ich die strategie geändert, da du ja sowieso die zwischenräume haben willst.

macht schon sinn, solche doch etwas aufwänderingen abfragen selbst auszuprobieren, dann werden die probleme klarer, anstelle wie ich ständig herumzudoktern. leider musste ich erst mal den apache freund installieren, da meine alte mysql version keine unterabfragen kann und dann auch noch der alte apache bei bestimmten abfragen fehlermeldungen brachte. und dann auch noch das problem angehen, das dauert schon. ;-)

wir auch immer, ich habe (hoffentlich) eine lösung gefunden. anstelle die verkettung zu verfolgen, habe ich den datensatz gesucht, der keinen nachfolger hat. sein enddatum ausgegeben zusammen mit den nächsten beginn, dass sollte es sein.

beim letzten datensatz kommt natürlich ein NULL wert für den Start raus, da kann man einen anderen wert eintragen, wenn du willst. aber ich habe ihn erst mal so stehen lassen

SELECT tab1.id, tab1.end AS 'Start',
 (
  SELECT MIN(tab3.begin)
  FROM termine AS tab3
  WHERE tab3.begin > tab1.end
 ) AS 'Ende'
FROM termine AS tab1
WHERE
 (
  SELECT COUNT( * )
  FROM termine AS tab2
  WHERE tab1.end
  BETWEEN tab2.begin
  AND tab2.end
  AND tab1.id <> tab2.id
 ) = 0

btw. vielen dfank für die tabellen struktur, ich habe aber die spalte date vermisst ?

gruß
Ilja