Maison >base de données >tutoriel mysql >Comment trouver la dernière destination de chaque train à l'aide de SQL ?

Comment trouver la dernière destination de chaque train à l'aide de SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 07:31:08650parcourir

How to Find the Latest Destination for Each Train Using SQL?

Utilisez la clause MAX(DATE) et GROUP BY pour trouver la dernière destination

Le but de cette requête SQL est de récupérer la dernière destination de chaque train, sous réserve de l'heure de départ maximale. Cependant, en excluant la colonne 'Dest' de la clause GROUP BY, je rencontre l'erreur "ora-00979 not a GROUP BY expression", qui semble contre-intuitive.

Pour résoudre ce problème, nous pouvons utiliser la fonction de fenêtre RANK() pour attribuer un classement à chaque destination au sein de chaque groupe de train. Concrètement, la destination la mieux classée correspondra à la dernière heure de départ.

La requête SQL suivante illustre cette approche :

<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>

La requête fonctionne comme suit :

  1. La sous-requête interne crée un ensemble de résultats intermédiaires qui inclut le train, la destination, l'heure de départ et le classement de chaque destination au sein de chaque groupe de train. La fonction RANK() attribue des classements par ordre décroissant d'heure de départ, le classement le plus élevé (1) indiquant la dernière heure de départ.
  2. La requête externe sélectionne les enregistrements dont le classement de destination est égal à 1. Cela filtre efficacement toutes les lignes, à l'exception des lignes représentant la dernière destination de chaque train.
  3. Le résultat final montre le train, la dernière destination et l'heure de départ correspondante pour 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!

Déclaration:
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