Maison >base de données >tutoriel mysql >Comment récupérer efficacement la ligne la plus récente pour chaque ID dans PostgreSQL ?

Comment récupérer efficacement la ligne la plus récente pour chaque ID dans PostgreSQL ?

DDD
DDDoriginal
2025-01-02 19:40:39430parcourir

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

Récupération de la dernière ligne pour chaque identifiant 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.

Utilisation de Distinct On Opérateur

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.

Utilisation des fonctions de fenêtre

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!

Déclaration:
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