Oracle | Jährlicher Status zum Stichtag


Kalito

Erfahrenes Mitglied
Hallo,

ich habe eine Tabelle, die von alle Meldungen von Personen beinhaltet. Der Aufbau sieht etwa so aus
Person_IDStatusGültig_vonGültig_bis
12A01.01.201430.09.2018
12B01.10.201830.01.2019

Aus dieser Tabelle soll ich jetzt ermitteln, wie der Status des Versicherten zum 1.1 jedes Jares ist

Als Ergebniss sollte folgendes rausbekommen

Person_IDJahrStatus
122014A
122015A
122016A
122017A
122018A
122019B

Ich habe noch eine zweite Tabelle, wo ich zu jeder Person Jährliche Statistikdaten. Also schon Ansätze der Zieltabelle. Aber irgendwie will nicht der Groschen fallen, wie ich den Status zum 1.1 des betreffenden Jahr ermitteln kann.

Danke im Vorraus.
Gruß Patrick
 

Yaslaw

n/a
Moderator
Mach eine Tabelle mit einem Feld jahr_start (Date). Darin sind alle Jahre aufgelistet (1.1.2010, 1.1.2011.... 1.1.2099).

ungetestet:
SQL:
select p.person_id, extract(year from j.jahr_start) as jahr, p.status
from t_person p, t_jahr j
where  t.jahr_start between p.gültig_von and p.gültig_bis
 

Zvoni

Erfahrenes Mitglied
Kenn mich in Oracle nicht aus, aber sieht mir irgendwie nach Dynamic SQL aus.
Du musst im Prinzip pro Person_ID eine Schleife bilden, welche von Min(Jahr(Gültig_von)) bis Max(Jahr(gültig_bis)) läuft um überhaupt die "verfügbaren" Jahre zu ermitteln.
Wenn du das Jahr ermittelt hast, ist es ein simples
SELECT Person_ID, Status, "Ermitteltes Jahr" FROM MyTable Where "01.01." || ErmitteltesJahr BETWEEN Gültig_von AND Gültig_BIS

Achtung: Aircode.

EDIT: Oder wie es Yaslaw beschrieben hat