2017-03-29 3 views
0

Ich habe einen Datensatz, der jedes Mal in die Datenbank geladen wird, wenn die Prognose für dieses bestimmte Datum geändert wird. Ich muss das letzte load_dt für jedes fore_dt auswählen können. Ein Beispiel Datensatz ist unter:Wählen Sie das maximale Datum in einer Spalte basierend auf eindeutigen Datumsangaben in einem anderen

load_dt, fore_dt, data, 
1/1/2017, 1/14/2017, 5, 
1/5/2017, 1/14/2017, 8, 
1/5/2017, 1/15/2017, 9, 
1/15/2017, 1/15/2017, 10, 
1/17/2017, 1/16/2017, 5 

Die Ergebnisse sollten wie folgt aussehen:

load_dt, fore_dt, data, 
1/5/2017, 1/14/2017, 8, 
1/15/2017, 1/15/2017, 10, 
1/17/2017, 1/16/2017, 5 

Die tatsächliche Datenmenge viel komplexer ist und hat eine Menge von Zeilen. In der Abfrage muss ich in der Lage sein, wo fore_dt zwischen Datum und Datum auszuwählen.

+0

Sollte nicht die zweite Zeile '1/15/2017, 15.01.2017, 10,' in Ihrem erwarteten Ergebnis sein? – GurV

+0

@ GurV Ja, Sie haben Recht. Danke, dass du darauf hingewiesen hast. –

+0

Benötigen Sie nur drei Spalten in der Ausgabe, oder gibt es mehr Spalten? (Es spielt keine Rolle, ob es mehr Spalten in der Eingabe gibt, was zählt, ist die Ausgabe.) Wenn nur diese drei Spalten vorhanden sind und die Leistung kritisch ist, können Sie mit der FIRST/LAST-Funktion etwas Zeit sparen. Ansonsten ist das, was GurV geschrieben hat, wahrscheinlich der beste Weg. – mathguy

Antwort

2

Sie Fensterfunktion verwenden können row_number Sequenznummer zuweisen Zeile load_dt innerhalb jeder fore_dt in der Reihenfolge der abnehmenden und dann die erste Zeile mit einem einfachen wählen where-Klausel:

+0

Das hat sehr gut funktioniert! Ich war in der Lage, den Code anzupassen, um ein Abfrageergebnis als Tabelle und Partition durch 2 Felder zu verwenden. –

0

Sie sind auf max suchen ()

select max(load_dt) as load_dt, fore_dt, max(data) 
    from yourtable 
    group by fore_dt 
Verwandte Themen