Grouper en utilisant GROUP BY et MAX(DATE) [dupliquer]
En SQL, vous pouvez rencontrer des situations dans lesquelles vous devez extraire les derniers enregistrements en fonction d'une colonne spécifique et les regrouper par une autre colonne. Par exemple, vous devrez peut-être déterminer la dernière destination de chaque train dans le tableau.
Grouper par MAX (Heure)
Au départ, vous avez essayé d'y parvenir en utilisant une simple instruction GROUP BY et MAX(Time), mais cela a entraîné une erreur. En effet, vous ne pouvez pas agréger des colonnes non groupées dans une instruction GROUP BY. Pour résoudre ce problème, vous devez inclure « Dest » dans l'instruction group by. Cependant, cela ne produit pas les résultats escomptés.
Utiliser la sous-requête et la fonction RANK
La solution consiste à utiliser des sous-requêtes et la fonction RANK(). La sous-requête crée une table intermédiaire qui calcule le classement de chaque destination en fonction de l'heure de départ. La fonction RANK() attribue des classements en fonction du temps, et pour chaque train, la valeur maximale (dernière heure) se voit attribuer un rang de 1.
La requête finale sélectionne le train, la destination et l'heure à partir de la sous-requête où dest_rank est 1. Cela garantit que seule la dernière destination de chaque train est récupérée.
Voici la requête SQL mise à jour :
SELECT train, dest, time FROM ( SELECT train, dest, time, RANK() OVER (PARTITION BY train ORDER BY time DESC) dest_rank FROM traintable ) where dest_rank = 1;
Cette requête produira les résultats souhaités :
火车 | 目的地 | 时间 |
---|---|---|
1 | SZ | 14:00 |
2 | HK | 13:00 |
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!