Maison > Article > base de données > Comment trier par date et heure avant de regrouper par nom dans MySQL ?
ORDER BY Date et heure avant le nom GROUP BY dans MySQL
Dans MySQL, la clause ORDER BY est appliquée avant la clause GROUP BY. Cependant, dans certains scénarios, les utilisateurs doivent trier les données par champs de date et d'heure avant d'effectuer un GROUP BY sur la colonne de nom.
Considérez le tableau suivant :
name | date | time |
---|---|---|
tom | 2011-07-04 | 01:09:52 |
tom | 2011-07-04 | 01:09:52 |
mad | 2011-07-04 | 02:10:53 |
mad | 2009-06-03 | 00:01:01 |
L'objectif est de récupérez d'abord le nom le plus ancien. La requête suivante échoue :
SELECT * ORDER BY date ASC, time ASC GROUP BY name
Cela est dû au fait que GROUP BY est appliqué avant ORDER BY, ce qui entraîne le regroupement des enregistrements portant le même nom avant le tri. En conséquence, l'ordre attendu n'est pas atteint.
Solution :
Pour résoudre ce problème, on peut utiliser l'approche suivante :
SELECT * FROM ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) AS sub GROUP BY name
Dans cette requête :
En utilisant cette méthode, GROUP BY est appliqué à l'ensemble de résultats ordonné, garantissant que le nom le plus ancien est récupéré en premier, quelles que soient la date et l'heure. champs.
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!