Maison > base de données > tutoriel mysql > Comment obtenir la dernière destination de chaque train à l'aide de « GROUP BY » et « MAX(DATE) » de SQL ?

Comment obtenir la dernière destination de chaque train à l'aide de « GROUP BY » et « MAX(DATE) » de SQL ?

Mary-Kate Olsen
Libérer: 2025-01-22 07:37:11
original
595 Les gens l'ont consulté

How to Get the Latest Destination for Each Train Using SQL's `GROUP BY` and `MAX(DATE)`?

Requête SQL utilisant GROUP BY et MAX(DATE) [Question en double]

Question :

Obtenez la dernière destination de chaque train en fonction de son heure de départ maximale à partir du tableau donné. La sortie souhaitée doit exclure les destinations en double tout en conservant l'heure la plus récente.

Exemples de données :

<code>火车    目的地      时间
1        HK        10:00
1        SH        12:00
1        SZ        14:00
2        HK        13:00
2        SH        09:00
2        SZ        07:00</code>
Copier après la connexion

Résultat attendu :

<code>火车    目的地      时间
1        SZ        14:00
2        HK        13:00</code>
Copier après la connexion

Tentative initiale :

Utilisez une simple requête GROUP BY et MAX(Time) :

<code class="language-sql">SELECT Train, Dest, MAX(Time)
FROM TrainTable
GROUP BY Train</code>
Copier après la connexion

Erreur :

Cette requête génère l'erreur "ora-00979 not a GROUP BY expression" indiquant que la colonne Dest doit également être incluse dans l'instruction GROUP BY. Cependant, cela entraînera une destination en double pour chaque train.

Solution :

Pour obtenir les résultats souhaités, des requêtes plus complexes peuvent être utilisées :

<code class="language-sql">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</code>
Copier après la connexion

Cette requête utilise d'abord la fonction RANK pour calculer le classement de chaque train pour chaque destination par ordre décroissant d'heure de départ. La clause PARTITION BY train garantit que le classement est effectué au sein de chaque groupe de train. Enfin, la requête récupère uniquement les enregistrements où dest_rank est égal à 1, filtrant efficacement les destinations en double et ne conservant que la dernière destination de chaque train.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal