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

¿Cómo seleccionar la identificación con el grupo de fechas máximas por categoría en PostgreSQL?

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