Hallo,
ich habe folgende Herausforderung:
Ich habe eine Tabelle <Urlaubsliste>. Diese hat für jeden Tag Urlaub einen Datensatz pro Mitarbeiter.
Bsp.:
Datum;Name;...
02.01.2015;Meier;...
05.01.2015;Meier;...
06.01.2015;Meier;...
07.01.2015;Meier;...
02.01.2015;Lehmann;..
usw. Die Datensätze werden in dieser Form für eine Schichtplanung verwendet.
Ich möchte nun in einem Report bzw. in einem View die Datensätze in der Form <Name; Datum von; Datum bis > ausgeben.
Bsp.:
Name;Datum von;Datum bis;...
Meier;02.01.2015;02.01.2015
Meier;05.01.2015;07.01.2015
Lehmann;02.01.2015;02.01.2015
Hat jemand von Euch eine Idee?
Herzlichen Dank im voraus.
Hallo,
sind die DS in der Ursprungstabelle nicht als Anfang und Ende gekennzeichnet?
ZitatHat jemand von Euch eine Idee?
Ja. Ein ununterbrochener Zeitraum wird begrenzt durch einen Tag, der keinen Vorgänger hat (Beginn Zeitraum), und einen Tag, der keinen Nachfolger hat (Zeitraumende). Das kann man in einer Abfrage umsetzen:
SELECT
T.Name,
T.Datum AS Beginn,
(
SELECT
Min(U.Datum)
FROM
(
SELECT
T1.Name,
T1.Datum
FROM
34_tblDatumswerte AS T1
WHERE
NOT EXISTS
(
SELECT
NULL
FROM
34_tblDatumswerte AS X
WHERE
X.Name = T1.Name
AND
X.Datum = T1.Datum + 1
)
) AS U
WHERE
U.Name = T.Name
AND
U.Datum >= T.Datum
) AS Ende
FROM
34_tblDatumswerte AS T
WHERE
NOT EXISTS
(
SELECT
NULL
FROM
34_tblDatumswerte AS X
WHERE
X.Name = T.Name
AND
X.Datum = T.Datum - 1
)
Sorry, dass ich mich erst jetzt melde. Die Grippe.
Erst einmal Danke für den Tipp. Es funktioniert prinzipiell, aber die Performance bei über 5000 Datensätzen ist leider sehr schlecht. Ich versuche jetzt mal eine Vorselektion um die Anzahl der Datensätze zu minimieren.
Danke
Neben der Begrenzung der Datenmenge (immer gute Idee) sollte man auch an eine passende Indizierung denken (auch immer):
SQL ist leicht ( 8 ) - Index (http://www.ms-office-forum.net/forum/showthread.php?t=317707)
Danke für den Tipp. Habe jetzt die entsprechenden Spalten indiziert und schon geht es wie die 'Sau'. Kein Vergleich zu vorher.
Danke.