PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Aggregat oder Fensterfunktion, um nur den letzten Wert zurückzugeben

DISTINCT plus Fensterfunktion

Fügen Sie ein DISTINCT hinzu Klausel:

SELECT DISTINCT a
     , last_value(b) OVER (PARTITION BY a ORDER BY b
                           RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM  (
   VALUES
     (1, 'do not want this')
    ,(1, 'just want this')
   ) sub(a, b);

Mehr über DISTINCT :

Einfacher und schneller mit DISTINCT ON

PostgreSQL hat auch diese Erweiterung des SQL-Standards:

SELECT DISTINCT ON (a)
       a, b
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
ORDER  BY a, b DESC;

Mehr über DISTINCT ON und eventuell schnellere Alternativen:

Einfaches Gehäuse mit glattem Aggregat

Wenn Ihr Fall ist eigentlich so einfach wie Ihre Demo (und Sie brauchen keine zusätzlichen Spalten aus dieser letzten Zeile), eine einfache Aggregatfunktion wird einfacher sein:

SELECT a, max(b)
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
GROUP  BY a;