Ausgabe
Ich habe eine Tabelle, in der Mitarbeiterinformationen gespeichert sind. Es können mehrere datumswirksame Datensätze für einen einzelnen Mitarbeiter vorhanden sein, wenn sich seine Arbeitsbedingungen ändern. Zum Beispiel von Vollzeit auf Teilzeit wechseln. Jeder Datensatz hat ein Gültig-ab-Datum, aber kein Gültig-bis-Datum. Einige Aufzeichnungen können in die Zukunft datierte Aufzeichnungen sein, die auf eine geplante Änderung der Umstände hinweisen.
Ich möchte den Datensatz identifizieren, der zu einem bestimmten Zeitpunkt auf der Grundlage des aktuellen Datums “aktiv” ist. Wenn wir also in meinem Beispiel unten davon ausgehen, dass das aktuelle Datum der 16. September 2022 ist, möchte ich die dritte Zeile so zurückgeben, wie sie nach dem 31. August 2022 und vor dem 1. Januar 2023 liegt.
+-------------+----------------+-------------+---- ----+ | Mitarbeiter_ID | Wirksamkeitsdatum | Arbeitsstatus | Job_ID | +-------------+----------------+-------------+---- ----+ | 1 | 01.01.2021 | FT | Ein | | 1 | 2021-04-22 | PT | Ein | | 1 | 2022-08-31 | PT | B | | 1 | 01.01.2023 | FT | B | +-------------+----------------+-------------+---- ----+
Lösung
Angenommen, Sie möchten die aktuelle Position für alle Mitarbeiter.
Select top 1 with ties *
From YourTable
Where Effective_Date<=getdate()
Order by row_number() over (partition by Employee_ID order by Effective_Date desc)
Beantwortet von – John Cappelletti
Antwort geprüft von – Pedro (FixError Volunteer)