Maison >base de données >tutoriel mysql >Comment récupérer efficacement la dernière ligne de chaque ID dans PostgreSQL ?
Problème :
Étant donné les données suivantes, vous souhaitez extraire le dernier enregistrement pour chaque identifiant unique :
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
Désiré Résultat :
id date another_info 1 2014-05-13 kgfd 2 2014-02-01 SADA 3 2014-06-12 fdsA
Solution :
Il existe deux méthodes efficaces pour y parvenir dans PostgreSQL :
Méthode 1 : Utilisation de l'opérateur DISTINCT ON
Postgres fournit l'opérateur DISTINCT ON, qui vous permet de sélectionner des lignes distinctes en fonction d'une ou plusieurs colonnes, puis d'appliquer d'autres opérations. Pour ce scénario, vous pouvez utiliser :
SELECT DISTINCT ON (id) id, date, another_info FROM the_table ORDER BY id, date DESC;
Méthode 2 : Utilisation d'une fonction de fenêtre
Les fonctions de fenêtre vous permettent d'effectuer des agrégations ou des calculs sur un ensemble de lignes qui peut être défini dynamiquement. Vous pouvez utiliser une fonction de fenêtre appelée ROW_NUMBER() pour attribuer un rang à chaque ligne de chaque groupe d'ID et sélectionner la ligne avec le rang le plus élevé :
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;
La solution utilisant une fonction de fenêtre est généralement plus rapide que d'utiliser une sous-requête.
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!