Maison > base de données > tutoriel mysql > Comment récupérer efficacement la dernière ligne de chaque ID dans PostgreSQL ?

Comment récupérer efficacement la dernière ligne de chaque ID dans PostgreSQL ?

Susan Sarandon
Libérer: 2024-12-28 17:09:11
original
448 Les gens l'ont consulté

How to Efficiently Retrieve the Last Row for Each ID in PostgreSQL?

PostgreSQL : Récupération de la dernière ligne pour chaque ID

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
Copier après la connexion

Désiré Résultat :

id    date          another_info
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-06-12         fdsA
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal