Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datensätze mit Datum in Form von Datum von - bis darstellen

Begonnen von Masywa, Januar 07, 2015, 08:47:39

⏪ vorheriges - nächstes ⏩

Masywa

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.

database

Hallo,

sind die DS in der Ursprungstabelle nicht als Anfang und Ende gekennzeichnet?

ebs17

#2
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
      )
Mit freundlichem Glück Auf!

Eberhard

Masywa

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

ebs17

Neben der Begrenzung der Datenmenge (immer gute Idee) sollte man auch an eine passende Indizierung denken (auch immer):
SQL ist leicht ( 8 ) - Index
Mit freundlichem Glück Auf!

Eberhard

Masywa

Danke für den Tipp. Habe jetzt die entsprechenden Spalten indiziert und schon geht es wie die 'Sau'. Kein Vergleich zu vorher.

Danke.