PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment sélectionner un identifiant avec un groupe de dates maximum par catégorie dans PostgreSQL ?

C'est un cas d'utilisation parfait pour DISTINCT ON - une extension spécifique à Postgres du standard DISTINCT :

SELECT DISTINCT ON (category)
       id  -- , category, date  -- any other column (expression) from the same row
FROM   tbl
ORDER  BY category, date DESC;

Attention au tri décroissant. Si la colonne peut être NULL, vous pouvez ajouter NULLS LAST :

  • Trier par colonne ASC, mais les valeurs NULL en premier ?

DISTINCT ON est simple et rapide. Explication détaillée dans cette réponse connexe :

  • Sélectionner la première ligne de chaque groupe GROUP BY ?

Pour les grands tableaux avec de nombreuses lignes par category envisager une approche alternative :

  • Optimiser la requête GROUP BY pour récupérer la dernière ligne par utilisateur
  • Optimiser la requête maximale par groupe