2017-12-19 10 views
0

Unten finden Sie eine einfache Möglichkeit, die neueste Version einer Zeile zu erhalten. Während dies für eine einzelne Zeile "in Ordnung" ist, wird es langsamer, wenn jede Zeile ausgewertet werden muss.Redshift last_value zum Abrufen der aktuellsten Zeile

SELECT * 
FROM dev.A t1 
where to_char(last_operation_date,'yyyymmdd') = (select max(to_char(last_operation_date,'yyyymmdd')) 
               from dev.A t2 
               where t1.inte_id = t2.inte_id) 
and t1.inte_id = 'PPP2434' 
+1

Welcher Datentyp ist 'last_operation_date'? –

+0

timestamp ex '2017-12-13 22:12:56' –

+0

Basierend auf Ihrer Anforderung "die neueste Version" Ich denke, Sie Abfrage ist falsch, mit dem Ignorieren der Zeit Teil des Zeitstempels zu beginnen. Ihre Abfrage gibt alle Zeilen zurück, die am letzten Tag aufgetreten sind, nicht eine einzelne "neueste Version". –

Antwort

0

Sie können die ROW_NUMBER() Funktion verwenden, um die letzte Zeile pro inte_id ohne Verwendung einer korrelierten Unterabfrage zu finden. Korrelierte Unterabfragen erfordern oft einen geschachtelten Schleifenschritt, der sie verlangsamt.

SELECT * 
FROM (
    SELECT * 
      ,ROW_NUMBER() OVER(PARTITION BY inte_id ORDER BY last_operation_date DESC) last_op_order 
    FROM dev.A t1 
    and t1.inte_id = 'PPP2434' 
    ) 
WHERE last_op_order = 1; 
Verwandte Themen