Zeilen auf Datumsangaben filtern

ny_unity

SQL-Guru
Beiträge
185
Hallo zusammen,

ich weiß nicht recht weiter, ich versuche mein Anliegen mal so genau wie möglich zu erklären:

Folgende Daten sind gegeben:
Spalten:
ID - PERSONALNR - DATUMVON - DATUMBIS
1 - 10795 - 2018-06-29 - 2018-06-29
2 - 10795 - 2018-07-12 - 2018-07-18
3 - 10795 - 2018-07-30 - 2019-02-16

Diese Daten sollen jetzt so gefiltert werden, dass DATUMVON immer <= DATIMBIS +28 Tage.
Also unabhänig davon, wie viele Einsätze wann gestartet und wie lange gingen, ich möchte das kleinste Datum haben, wo zwischen den DATUMVON und DATUMBIS nicht mehr als 28 Tage liegen.

Im obigen Beispiel wäre es hier der 29.06.2018.

ID - PERSONALNR - DATUMVON - DATUMBIS
1 - 10795 - 2018-06-29 - 2018-06-29
2 - 10795 - 2018-09-12 - 2018-10-18
3 - 10795 - 2018-10-30 - 2019-02-16

In diesem Beispiel wäre das gewünschte Ergebnis der 12.09.2018, da die Datumswerte von ID = 1 älter als 28 Tage von ID=2 sind.

Ich hoffe ich konnte es ordentlich rüberbringen und hoffe auf die ein oder andere Hilfe.

Vielen Dank!

Erik
 
Werbung:
war auch meine erste Vermutung, dann kamen mir aber Zweifel und das, was er sucht, ist offenbar die Verknüpfung von mehreren Zeilen, nicht nur die Diff zwischen von und bis.
 
moin, ich habe es letztendlich mit einem Self-Join gelöst, da mir die funktionien wie lag und lead nicht bekannt waren und ich die syntax nicht auf die reihe bkommen habe... brauchte auch idealerweise etwas für Firebird-DB.
 
mit dem Self.Join das klappt nicht wie gewollt. ich habe jetzt doch mal die lead() funktion mir angesehen
Window (Analytical) Functions
aber es klappt nicht wie gewollt, wie sollte denn hier die syntax aussehen, damit ich nur datensaätze bekomme, die nicht älter -28 Tage sind als das vondatum sind?
 
Werbung:
Also es fällt mir etwas schwer nachzuvollziehen was du genau suchst aber ich glaube es verstanden zu haben. Würde das hier das richtige Ergebnis liefern:
Code:
SELECT   tabelle.PERSONALNR,
       min(tabelle.DATUMVON) AS DATUMVON,
       t.DATUMBIS
FROM   tabelle
INNER JOIN (

SELECT   PERSONALNR,
       max(DATUMBIS) AS DATUMBIS
FROM   tabelle

   ) t
ON       tabelle.PERSONALNR = t.PERSONALNR
WHERE   datediff(day,tabelle.DATUMVON,t.DATUMBIS) <= 28
GROUP BY tabelle.PERSONALNR,t.DATUMBIS
 
Zurück
Oben