Heim > Datenbank > MySQL-Tutorial > Wie erhalte ich mit SQLs „GROUP BY' und „MAX(DATE)' das neueste Ziel für jeden Zug?

Wie erhalte ich mit SQLs „GROUP BY' und „MAX(DATE)' das neueste Ziel für jeden Zug?

Mary-Kate Olsen
Freigeben: 2025-01-22 07:37:11
Original
633 Leute haben es durchsucht

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

SQL-Abfrage mit GROUP BY und MAX(DATE) [Doppelte Frage]

Frage:

Ermitteln Sie das späteste Ziel jedes Zugs basierend auf seiner maximalen Abfahrtszeit aus der angegebenen Tabelle. Die gewünschte Ausgabe sollte doppelte Ziele ausschließen und gleichzeitig die neueste Zeit beibehalten.

Beispieldaten:

<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>
Nach dem Login kopieren

Erwartetes Ergebnis:

<code>火车    目的地      时间
1        SZ        14:00
2        HK        13:00</code>
Nach dem Login kopieren

Erster Versuch:

Verwenden Sie eine einfache GROUP BY-Abfrage und MAX(Time):

<code class="language-sql">SELECT Train, Dest, MAX(Time)
FROM TrainTable
GROUP BY Train</code>
Nach dem Login kopieren

Fehler:

Diese Abfrage führt zu dem Fehler „ora-00979 not a GROUP BY expression“, was darauf hinweist, dass die Spalte Dest auch in der GROUP BY-Anweisung enthalten sein muss. Dies führt jedoch zu einem doppelten Ziel für jeden Zug.

Lösung:

Um die gewünschten Ergebnisse zu erzielen, können komplexere Abfragen verwendet werden:

<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>
Nach dem Login kopieren

Diese Abfrage verwendet zunächst die Funktion RANK, um die Rangfolge jedes Zuges für jedes Ziel in absteigender Reihenfolge der Abfahrtszeit zu berechnen. Die PARTITION BY train-Klausel stellt sicher, dass innerhalb jeder Zuggruppe eine Rangfolge durchgeführt wird. Schließlich ruft die Abfrage nur Datensätze ab, bei denen dest_rank gleich 1 ist, wodurch doppelte Ziele effektiv herausgefiltert werden und nur das letzte Ziel für jeden Zug beibehalten wird.

Das obige ist der detaillierte Inhalt vonWie erhalte ich mit SQLs „GROUP BY' und „MAX(DATE)' das neueste Ziel für jeden Zug?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage