Maison >base de données >tutoriel mysql >Comment récupérer efficacement la ligne la plus récente pour chaque ID dans PostgreSQL ?
Considérez un ensemble de données avec des colonnes pour l'ID, la date et des informations supplémentaires :
id date another_info 1 2014-02-01 kjkj 1 2014-03-11 ajskj 1 2014-05-13 kgfd 2 2014-02-01 SADA 3 2014-02-01 sfdg 3 2014-06-12 fdsA
Notre objectif est de récupérer la ligne la plus récente pour chaque identifiant distinct.
L'approche la plus efficace dans PostgreSQL consiste à utiliser l'opérateur DISTINCT ON :
SELECT DISTINCT ON (id) id, date, another_info FROM the_table ORDER BY id, date DESC;
Cette requête identifie et renvoie uniquement la première ligne distincte pour chaque ID unique, triée par ordre décroissant de la colonne de date.
Pour une solution inter-bases de données, nous pouvons exploiter la fenêtre fonctions :
SELECT id, date, another_info FROM ( SELECT id, date, another_info, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn FROM the_table ) t WHERE rn = 1 ORDER BY id;
Cette requête crée une fonction de fenêtre pour calculer le numéro de ligne pour chaque ID, classé par date par ordre décroissant. La condition WHERE rn = 1 filtre les lignes pour inclure uniquement la ligne la mieux classée pour chaque ID, et la clause ORDER BY finale garantit que les résultats sont classés par ID.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!