sql >> Base de Datos >  >> RDS >> PostgreSQL

Agregado de PostgreSQL o función de ventana para devolver solo el último valor

DISTINCT más función de ventana

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

Más información sobre DISTINCT :

Más simple y rápido con DISTINCT ON

PostgreSQL también tiene esta extensión del estándar 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;

Más información sobre DISTINCT ON y posiblemente alternativas más rápidas:

Caso simple con árido liso

Si su caso es realmente tan simple como su demostración (y no necesita columnas adicionales de esa última fila), una función agregada simple será más simple:

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