gurbelunder
SQL-Guru
- Beiträge
- 136
Moin Leute,
heute habe ich mal wieder einen "StehAufDemSchlauch" Tag. Folgende Struktur:
eine Tabelle, eine View:
V_VERTRAG_PERSON_STATUS
hier drin steht, welche VertragsID welcher PersonID zugwiesen ist. Da die PersonID den Vertrag wechseln kann und somit einen Statuswechsel durchlebt, gibt es zu den meisten Personen auch mehrere VertragsID's.
ID | PERSON_ID | PERSON_STATUS | STATUS_CODE (nur für die Übersicht interessant)
T_VERTRAGSZEITEN
hier werden die Laufzeiten der Verträge durch ein setzen von Start- und Enddatum definiert, Enddatum kann NULL sein. Allerdings kann der aktuellste Vertrag auch ein Enddatum besitzen (Beispiel Freelancer).
ID | VERTRAG_ID | STARTDATUM | ENDDATUM
Nun versuche ich gerade, aus diesen beiden Tabellen eine View zu bauen, die mir zu jeder PersonID die aktuelle VertragsID anzeigt. Da sich leider immer der Status mit der neuen VertragsID ändert, bekomme ich auf diese Weise alle Vertragswechsel einer PersonID.
Die Idee, nach dem aktuellsten Startdatum zu suchen ist so das erste Filterkriterium. Einfach mit fragen, welche Datensätze ENDDATUM IS NULL aufweisen, ist hier inhaltlich falsch, daher auskommentiert.
Kann mich mal einer nach rechts heben, damit der Schlauch wieder frei wird?
Danke euch und Grüße,
David
heute habe ich mal wieder einen "StehAufDemSchlauch" Tag. Folgende Struktur:
eine Tabelle, eine View:
V_VERTRAG_PERSON_STATUS
hier drin steht, welche VertragsID welcher PersonID zugwiesen ist. Da die PersonID den Vertrag wechseln kann und somit einen Statuswechsel durchlebt, gibt es zu den meisten Personen auch mehrere VertragsID's.
ID | PERSON_ID | PERSON_STATUS | STATUS_CODE (nur für die Übersicht interessant)
T_VERTRAGSZEITEN
hier werden die Laufzeiten der Verträge durch ein setzen von Start- und Enddatum definiert, Enddatum kann NULL sein. Allerdings kann der aktuellste Vertrag auch ein Enddatum besitzen (Beispiel Freelancer).
ID | VERTRAG_ID | STARTDATUM | ENDDATUM
Nun versuche ich gerade, aus diesen beiden Tabellen eine View zu bauen, die mir zu jeder PersonID die aktuelle VertragsID anzeigt. Da sich leider immer der Status mit der neuen VertragsID ändert, bekomme ich auf diese Weise alle Vertragswechsel einer PersonID.
Code:
CREATE OR REPLACE VIEW V_VERTRAG_VERTRAGSZEIT_PERSON AS
SELECT DISTINCT v.ID, v.PERSON_ID, v.PERSON_STATUS, vz.STARTDATUM, vz.ENDDATUM
FROM V_VERTRAG_PERSON_STATUS v, T_VERTRAGSZEITEN vz
WHERE v.ID = vz.VERTRAG_ID
AND vz.STARTDATUM < SYSDATE
--AND ENDDATUM IS NULL
AND vz.STARTDATUM IN
(
SELECT MAX(vz2.STARTDATUM)
FROM T_VERTRAGSZEITEN vz2
WHERE vz2.VERTRAG_ID = v.ID
)
ORDER BY v.PERSON_ID;
Die Idee, nach dem aktuellsten Startdatum zu suchen ist so das erste Filterkriterium. Einfach mit fragen, welche Datensätze ENDDATUM IS NULL aufweisen, ist hier inhaltlich falsch, daher auskommentiert.
Kann mich mal einer nach rechts heben, damit der Schlauch wieder frei wird?
Danke euch und Grüße,
David