Este es un caso de uso perfecto para DISTINCT ON
- una extensión específica de Postgres del estándar DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Cuidado con el orden de clasificación descendente. Si la columna puede ser NULL, es posible que desee agregar NULLS LAST
:
- ¿Ordenar por columna ASC, pero los valores NULL primero?
DISTINCT ON
es sencillo y rápido. Explicación detallada en esta respuesta relacionada:
- ¿Seleccionar la primera fila en cada grupo GROUP BY?
Para tablas grandes con muchas filas por category
considere un enfoque alternativo:
- Optimizar la consulta GROUP BY para recuperar la fila más reciente por usuario
- Optimizar consulta máxima grupal