Hallo,
ich habe eine Tabelle, wo Buchungen von mehreren Clients geschrieben werden. Für die Frage sind die Felder "Buchungszeitpunkt" und "Buchungsart" wichtig. Ich möchte nun die Buchungen ausgegeben bekommen, die nach einem "START"
kein "ENDE" haben. Es reicht hier IMHO aus die letzte Buchung des Tages zu prüfen, ob diese "START" ist .
Ich müsste also für einen vorzugebenen Zeitraum und einem bestimmten Client die Datensätze nach Jahr/Monat/Tag gruppieren, in der Gruppierung den zeitlich höchsten Datensatz zu nehmen und prüfen, ob dieser Buchungsart = START ist. Wenn ja, wird dieser Datensatz
oder wenigstens das Datum auszugeben.
Als Ergebnis werden alle Tage ausgegeben, an denen die letzte Buchungsart = START ist, also eine ENDE-Buchung fehlt.
Den zeitlich letzten Datensatz zu ermitteln, ist so möglich:
SELECT YEAR(Buchungszeitpunkt), MONTH(Buchungszeitpunkt), DAY(Buchungszeitpunkt), MAX(Buchungszeitpunkt)
FROM Arbeitsschrittjournal
WHERE (Buchungszeitpunkt >= '01.01.2013 00:00:00') AND (Buchungszeitpunkt <= '31.03.2013 23:59:59') AND
(Client = 'xyz')
GROUP BY YEAR(Buchungszeitpunkt), MONTH(Buchungszeitpunkt), DAY(Buchungszeitpunkt)
ORDER BY YEAR(Buchungszeitpunkt) ASC, MONTH(Buchungszeitpunkt) ASC, DAY(Buchungszeitpunkt) ASC
Nur wie hier nun den kompletten Datensatz anzeigen lassen und noch wichtiger, auf BuchungartId = 1 (=START) filtern? Über HAVING geht das ja nur, wenn ich danach auch gruppiere.
mfg