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