Heim >Datenbank >MySQL-Tutorial >Wie finde ich mithilfe von SQL das neueste Ziel für jeden Zug?

Wie finde ich mithilfe von SQL das neueste Ziel für jeden Zug?

Linda Hamilton
Linda HamiltonOriginal
2025-01-22 07:31:08650Durchsuche

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

Verwenden Sie die Klausel MAX(DATE) und GROUP BY, um das neueste Ziel zu finden

Das Ziel dieser SQL-Abfrage besteht darin, das letzte Ziel jedes Zuges abzurufen, abhängig von der maximalen Abfahrtszeit. Wenn ich jedoch die Spalte „Dest“ aus der GROUP BY-Klausel ausschließe, erhalte ich den Fehler „ora-00979 not a GROUP BY expression“, der kontraintuitiv erscheint.

Um dieses Problem zu lösen, können wir die Fensterfunktion RANK() nutzen, um jedem Ziel innerhalb jeder Zuggruppe eine Rangfolge zuzuweisen. Insbesondere entspricht das Ziel mit dem höchsten Rang der spätesten Abfahrtszeit.

Die folgende SQL-Abfrage veranschaulicht diesen Ansatz:

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

Abfrage funktioniert wie folgt:

  1. Die innere Unterabfrage erstellt einen Zwischenergebnissatz, der den Zug, das Ziel, die Abfahrtszeit und die Rangfolge jedes Ziels innerhalb jeder Zuggruppe enthält. Die Funktion RANK() weist Rangfolgen in absteigender Reihenfolge der Abfahrtszeit zu, wobei die höchste Rangfolge (1) die späteste Abfahrtszeit angibt.
  2. Die externe Abfrage wählt Datensätze mit der Zielrangfolge 1 aus. Dadurch werden effektiv alle Zeilen mit Ausnahme der Zeilen herausgefiltert, die das letzte Ziel jedes Zugs darstellen.
  3. Das Endergebnis zeigt den Zug, das letzte Ziel und die entsprechende Abfahrtszeit für jeden Zug.

Das obige ist der detaillierte Inhalt vonWie finde ich mithilfe von SQL 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