Maison >base de données >tutoriel mysql >Comment sélectionner les derniers enregistrements pour chaque combinaison de méthode et d'ID dans MySQL ?
Comment récupérer les derniers enregistrements datés d'une table MySQL
Lors du stockage de données sensibles au temps dans une table MySQL, il est souvent nécessaire de récupérer les enregistrements les plus récents pour des combinaisons spécifiques de champs. L'exemple suivant montre comment y parvenir lorsqu'il s'agit d'une table de réponses RPC comportant des champs tels que des horodatages, des méthodes et des ID.
Question
Considérez une table nommée rpc_responses avec la structure suivante :
CREATE TABLE rpc_responses ( timestamp DATE, method VARCHAR, id VARCHAR, response MEDIUMTEXT, PRIMARY KEY (timestamp, method, id) );
Étant donné ce qui suit data :
timestamp | method | id | response |
---|---|---|---|
2009-01-10 | getThud | 16 | "....." |
2009-01-10 | getFoo | 12 | "....." |
2009-01-10 | getBar | 12 | "....." |
2009-01-11 | getFoo | 12 | "....." |
2009-01-11 | getBar | 16 | "....." |
Résultat souhaité
Obtenir une liste des réponses les plus récentes pour toutes les combinaisons existantes de méthode et d'identifiant :
timestamp | method | id | response |
---|---|---|---|
2009-01-10 | getThud | 16 | "....." |
2009-01-10 | getBar | 12 | "....." |
2009-01-11 | getFoo | 12 | "....." |
2009-01-11 | getBar | 16 | "....." |
Réponse
Pour ce faire, utilisez ce qui suit query :
SELECT * FROM ( SELECT *, IF(@last_method = method, 0, 1) AS new_method_group, @last_method := method FROM rpc_responses ORDER BY method, timestamp DESC ) AS t1 WHERE new_method_group = 1;
Cette requête récupère efficacement le résultat souhaité sans avoir besoin de jointures. Il conserve également la structure de lignes souhaitée, fournissant un enregistrement distinct pour chaque combinaison unique de méthode et d'identifiant.
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!