Lorsque vous travaillez avec des données, il est souvent nécessaire d'extraire des informations spécifiques de divers ensembles de données. Dans le cas de PostgreSQL, les utilisateurs peuvent rencontrer des scénarios dans lesquels ils doivent obtenir le dernier enregistrement pour chaque ID unique.
Considérez le tableau suivant :
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 |
Le but est d'extraire la dernière ligne de données pour chaque identifiant unique dans un nouveau tableau :
id | date | another_info |
---|---|---|
1 | 2014-05-13 | kgfd |
2 | 2014-02-01 | SADA |
3 | 2014-06-12 | fdsA |
L'opérateur DISTINCT ON de Postgres gère efficacement ce scénario :
select distinct on (id) id, date, another_info from the_table order by id, date desc;
Pour une compatibilité entre bases de données, les fonctions de fenêtre comme row_number() peuvent être utilisé :
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;
Les benchmarks indiquent généralement que l'approche de la fonction de fenêtre est plus rapide que les sous-requêtes.
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!