PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Função de agregação ou janela do PostgreSQL para retornar apenas o último valor

DISTINCT mais função de janela


Adicione um DISTINCT cláusula:
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);

Mais sobre DISTINCT :

Mais simples e rápido com DISTINCT ON


O PostgreSQL também possui esta extensão do padrão 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;

Mais sobre DISTINCT ON e possivelmente alternativas mais rápidas:

Caso simples com agregado simples


Se seu caso é realmente tão simples quanto sua demonstração (e você não precisa de colunas adicionais dessa última linha), uma função de agregação simples será mais simples:
SELECT a, max(b)
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
GROUP  BY a;