PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Funzione di aggregazione o finestra di PostgreSQL per restituire solo l'ultimo valore

DISTINCT più funzione finestra

Aggiungi un DISTINCT clausola:

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);

Ulteriori informazioni su DISTINCT :

Più semplice e veloce con DISTINCT ON

PostgreSQL ha anche questa estensione dello standard SQL:

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;

Ulteriori informazioni su DISTINCT ON e possibilmente alternative più veloci:

Cassa semplice con aggregato semplice

Se il tuo caso è in realtà semplice come la tua demo (e non hai bisogno di colonne aggiuntive da quell'ultima riga), una semplice funzione di aggregazione sarà più semplice:

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