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

Como selecionar id com grupo de data máxima por categoria no PostgreSQL?


Este é um caso de uso perfeito para DISTINCT ON - uma extensão específica do Postgres do padrão DISTINCT :
SELECT DISTINCT ON (category)
       id  -- , category, date  -- any other column (expression) from the same row
FROM   tbl
ORDER  BY category, date DESC;

Cuidado com a ordem de classificação decrescente. Se a coluna pode ser NULL, você pode querer adicionar NULLS LAST :
  • Classificar por coluna ASC, mas primeiro com valores NULL?

DISTINCT ON é simples e rápido. Explicação detalhada nesta resposta relacionada:
  • Selecionar a primeira linha em cada grupo GROUP BY?

Para tabelas grandes com muitas linhas por category considere uma abordagem alternativa:
  • Otimize a consulta GROUP BY para recuperar a última linha por usuário
  • Otimizar a consulta máxima em grupo