Quels identifiants d'enregistrement distincts sont les plus récents ?
Dans une table de base de données donnée, certains enregistrements sont interconnectés par une colonne partagée. L'objectif est d'identifier les trois identifiants d'enregistrement distincts les plus récents associés à cette valeur de colonne partagée.
Pour y parvenir, considérez l'exemple de tableau ci-dessous :
id | time | text | otheridentifier |
---|---|---|---|
1 | 6 | apple | 4 |
2 | 7 | orange | 4 |
3 | 8 | banana | 3 |
4 | 9 | pear | 3 |
5 | 10 | grape | 2 |
Dans un premier temps, une approche intuitive pourrait être à regrouper par la colonne otheridentifier et ensuite à trier par temps décroissant. Cependant, cette méthode ne donnerait pas le résultat souhaité :
SELECT * FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3;
Cette requête inclurait par erreur les enregistrements avec les identifiants 3 et 1 au lieu des identifiants corrects 4 et 2. La raison de cette différence réside dans l'exécution de la requête. ordre : le regroupement a priorité sur l'ordre.
Pour obtenir les résultats escomptés, une solution plus complexe est obligatoire :
SELECT * FROM `table` WHERE `id` = ( SELECT `id` FROM `table` as `alt` WHERE `alt`.`otheridentifier` = `table`.`otheridentifier` ORDER BY `time` DESC LIMIT 1 ) ORDER BY `time` DESC LIMIT 3;
Cette requête modifiée utilise une sous-requête pour sélectionner l'identifiant unique avec la dernière valeur temporelle pour chaque autre valeur d'identifiant distincte. Cette requête optimisée garantit la sortie souhaitée des identifiants d'enregistrement distincts 5, 4 et 2.
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!