thunderstruck_SELECT
Benutzer
- Beiträge
- 7
Folgendes Problem: Habe eine SQL-Datebank unter SQL-Server 2012 mit folgendem Aufbau:
Behandlungszimmer(int1-4) - Datum(charYYYYMMTT) --- Zeit(char hhmm )--- Dauer (int Minuten) ----- Name(char)
1-20231030-0900-45-Müller
1-20231030-1115-30-Maier
1-20231030-1200-15-Schulze
Hätte gerne eine Abfrage, die mir Lücken (z.B. > 30 Minuten) im Terminkalender für z.B. die nächsten 4 Wochen anzeigt, die ich dann per Hand zur Onlineterminierung freigeben könnte. Im o.g. Beispiel wäre das Kriterium gegeben, da Maier um 09:45h fertig sein sollte und der nächste Patient erst um 11:15h bestellt ist.
Nach Maier wäre keine entsprechend große Lücke, da er um 11:45h fertig wäre, dann hätte ich nur eine Lücke von 15 Minuten.
Hab auch schon ordentlich rumprobiert, aber klappt leider nicht. Hier einer meiner kläglichen Versuche.
SELECT a.Behandlungszimmer, a.Datum, a.Zeit, a.Dauer, b.Datum AS NextDatum, b.Zeit AS NextZeit, b.Dauer AS NextDauer
FROM TerminTabelle a
JOIN TerminTabelle b
ON a.Behandlungszimmer = b.Behandlungszimmer
AND a.Datum * 10000 + a.Zeit + a.Dauer * 100 <= (b.Datum * 10000 + b.Zeit)
AND (b.Datum * 10000 + b.Zeit) - (a.Datum * 10000 + a.Zeit + a.Dauer * 100) > 30
WHERE a.Datum <= b.Datum
AND (a.Datum < b.Datum OR a.Zeit + a.Dauer * 100 <= b.Zeit)
ORDER BY a.Behandlungszimmer, a.Datum, a.Zeit;
Wäre sehr dankbar für eine Lösung.
Behandlungszimmer(int1-4) - Datum(charYYYYMMTT) --- Zeit(char hhmm )--- Dauer (int Minuten) ----- Name(char)
1-20231030-0900-45-Müller
1-20231030-1115-30-Maier
1-20231030-1200-15-Schulze
Hätte gerne eine Abfrage, die mir Lücken (z.B. > 30 Minuten) im Terminkalender für z.B. die nächsten 4 Wochen anzeigt, die ich dann per Hand zur Onlineterminierung freigeben könnte. Im o.g. Beispiel wäre das Kriterium gegeben, da Maier um 09:45h fertig sein sollte und der nächste Patient erst um 11:15h bestellt ist.
Nach Maier wäre keine entsprechend große Lücke, da er um 11:45h fertig wäre, dann hätte ich nur eine Lücke von 15 Minuten.
Hab auch schon ordentlich rumprobiert, aber klappt leider nicht. Hier einer meiner kläglichen Versuche.
SELECT a.Behandlungszimmer, a.Datum, a.Zeit, a.Dauer, b.Datum AS NextDatum, b.Zeit AS NextZeit, b.Dauer AS NextDauer
FROM TerminTabelle a
JOIN TerminTabelle b
ON a.Behandlungszimmer = b.Behandlungszimmer
AND a.Datum * 10000 + a.Zeit + a.Dauer * 100 <= (b.Datum * 10000 + b.Zeit)
AND (b.Datum * 10000 + b.Zeit) - (a.Datum * 10000 + a.Zeit + a.Dauer * 100) > 30
WHERE a.Datum <= b.Datum
AND (a.Datum < b.Datum OR a.Zeit + a.Dauer * 100 <= b.Zeit)
ORDER BY a.Behandlungszimmer, a.Datum, a.Zeit;
Wäre sehr dankbar für eine Lösung.