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
Mary-Kate OlsenOriginal
2025-01-22 07:37:11685Durchsuche

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>

Erwartetes Ergebnis:

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

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>

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>

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!

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