Hatte erst meine Überlegungen so angefangen
SQL-Code:
SELECT PersNr, min(BeginnDatum+BeginnUhrzeit) AS Beginn, max(EndeDatum+EndeUhrzeit) AS Ende, Fehlart,
lag(PersNr || Fehlart, ***) OVER (
--PARTITION BY PersNr, Fehlart
--ORDER BY EndeDatum+EndeUhrzeit
) AS GroupID
GROUP BY GroupID
ORDER BY PersNr, Fehlart, BeginnDatum, BeginnUhrzeit
aber das mit den WindowFunctions ist nicht so mein Ding.
Also dann doch mit den guten alten SubSelects weiterüberlegt.
SQL-Code:
SELECT PersNr, min(BeginnDatum+BeginnUhrzeit) AS Beginn, max(EndeDatum+EndeUhrzeit) AS Ende, Fehlart,
(
WITH RECURSIVE Temp(Datum) AS (
SELECT Abwesenheiten.BeginnDatum
UNION ALL
SELECT Loop.BeginnDatum
FROM Abwesenheiten AS Loop
WHERE Loop.BeginnDatum = Datum - 1
AND Loop.PersNr = Abwesenheiten.PersNr
AND Loop.Fehlart = Abwesenheiten.Fehlart
)
SELECT min(Datum) FROM Temp;
) AS GroupID
FROM Abwesenheiten
GROUP BY GroupID
ORDER BY PersNr, Fehlart, BeginnDatum, BeginnUhrzeit
>> nur grobe ungetestete Gedankengänge <<
Im Prinzip irgendwie den zuzammengehörigen Datensätzen eine Kennung verpassen und da ein GROUP BY drauf anwenden.