2017-01-14 4 views
0

Ich frage, wie Sie den Wert finden, was ich finden möchte.Oracle SQL Suchen bestimmter Spaltenwert in Datensatz

ich der Datensatz haben scheint, wie unten

(D die neueste Zeit ist)

END_DATE | START_DATE | YN_DC 
------------------------------ 
    D   C   Y 
    C   B   Y 
    B   A   N 

In diesem Fall möchte ich den Zeitwert „B“ zu finden, die die Startzeit dass der Wert von YN_DC von "N" in "Y" geändert wurde

Wenn die Spalte YN_DC in "Y" geändert wurde, wird sie nie wieder in "N" geändert.

Wie kann ich den Wert B mit SQL finden?

Wenn ich C oder Java verwende, könnte ich den Wert als rekursive Funktion oder etwas anderes finden, aber ich habe keine Ahnung, wenn ich versuche, das mit SQL zu finden.

+0

Haben Sie 'lead()' versucht? – Serg

+0

Also suchen Sie nach dem START_DATE der letzten Zeile mit YN_DC = Y und END_DATE wird von DESC bestellt? – Edward

Antwort

0

Verwenden Sie die Fensterfunktion LEAD, um den Wert der nächsten Zeile von YN_DC basierend auf der aufsteigenden Reihenfolge von start_date abzurufen. Überprüfen Sie, ob der Wert YN_DC der aktuellen Zeile N ist und der Wert der nächsten Zeile Y ist.

select end_date 
from (select d.*, lead(YN_DC) over(order by start_date) as next_yn_dc 
     from dataset d 
    ) x 
where yn_dc='N' and next_yn_dc='Y' 
+0

Vielen Dank für Ihren Kommentar. Ich werde es nächsten Montag versuchen. – Christopher

+0

Ihre SQL auf kommentierte ist definitiv super funktioniert. Ich freue mich wirklich über Ihren Kommentar und ich werde lernen, über die Funktion LEAD und OVER zu lernen. Vielen Dank – Christopher

Verwandte Themen