PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Agrégat PostgreSQL ou fonction de fenêtre pour renvoyer uniquement la dernière valeur

DISTINCT plus fonction fenêtre

Ajouter un DISTINCT clause :

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

En savoir plus sur DISTINCT :

Plus simple et plus rapide avec DISTINCT ON

PostgreSQL possède également cette extension du 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;

En savoir plus sur DISTINCT ON et éventuellement des alternatives plus rapides :

Cas simple avec agrégat simple

Si votre cas est en fait aussi simple que votre démo (et vous n'avez pas besoin de colonnes supplémentaires à partir de cette dernière ligne), une simple fonction d'agrégation sera plus simple :

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