2017-07-29 22 views
0

Hier sind meine Daten. Mitglied kann sich mehrfach anmelden und kann den Plan jederzeit ändern. Ich benötige C_level-Daten für die neueste Version in der Nähe von getdate, das ist "8/1/2017" für ID 1, denn ID 2 hat nicht die neuesten Daten, diesen Fall Wir müssen zeigen 31.12.2016 Rekord, hoffe das hilft.Lass mich irgendwelche Fragen wissen, danke.So erhalten Sie den letzten aktiven Datensatz

ID Start_Date End_Date C_Level 
1 1/1/2016 12/31/2016 1 
1 1/1/2017 8/1/2017  2 
1 9/1/2017 12/31/2017 3 
1 1/1/2018 12/31/2018 0 
2 1/1/2015 12/31/2015 2 
2 1/1/2016 12/31/2016 3 
+0

Was meinen Sie exaclty von "neuesten Daten"? Warum hat ID1 "neueste Daten", während ID 2 es nicht hat? – krokodilko

+0

ID ist bis 2019 angemeldet, aber ID2 ist nicht mehr im System aktiv, er könnte ausgelaufen sein/wechselte zu einer anderen Versicherungsgesellschaft. –

+0

ID 1 ist c_level "2" bis zum 8/1/2017 und ab dem 9/1/2017 wird er auf c_level "3" umgestellt, wenn ich die Abfrage ausführe sollte ich "8/1/2017" Zeilen bekommen und wenn ich Abfrage ausführen am 9/1/2017 Ich sollte 9/1/2017 erhalten –

Antwort

1

Wenn ich Ihre Anforderungen richtig verstehen, dann sollte diese Abfrage geben, was Sie wollen:

WITH current_running AS (
    SELECT to_date('8/1/2017','mm/dd/rrrr') As Current_running_date 
    FROM dual 
) 
SELECT * FROM (
    SELECT t.*, 
      row_number() Over (partition by id order by end_date desc) As rn, 
      c.Current_running_date 
    FROM Table1 t 
    JOIN current_running c 
    ON c.Current_running_date >= ANY(t.Start_Date, t.End_Date) 
) 
WHERE rn = 1 
; 

Demo: http://sqlfiddle.com/#!4/33de0/10


Für current_running_date = 2017-08-01 es gibt:

| ID |   START_DATE |    END_DATE | C_LEVEL | RN | CURRENT_RUNNING_DATE | 
|----|-----------------------|-----------------------|---------|----|----------------------| 
| 1 | 2017-01-01 00:00:00.0 | 2017-08-01 00:00:00.0 |  2 | 1 | 2017-08-01T00:00:00Z | 
| 2 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 |  3 | 1 | 2017-08-01T00:00:00Z | 

während für current_running_date = 2016-07-15

| ID |   START_DATE |    END_DATE | C_LEVEL | RN | CURRENT_RUNNING_DATE | 

|----|-----------------------|-----------------------|---------|----|----------------------| 
| 1 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 |  1 | 1 | 2016-07-15T00:00:00Z | 
| 2 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 |  3 | 1 | 2016-07-15T00:00:00Z | 
+0

Wow, sieht gut aus, ich validiere alle Szenarien, Bitte erlauben Sie irgendwann, Feedback zu geben, Sie sind super :) –

Verwandte Themen