Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit MAX() und GROUP BY die PID der neuesten Zeile für jede eindeutige RID in MySQL abrufen?

Wie kann ich mit MAX() und GROUP BY die PID der neuesten Zeile für jede eindeutige RID in MySQL abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-31 01:29:12461Durchsuche

How to Retrieve the PID of the Latest Row for Each Unique RID in MySQL Using MAX() and GROUP BY?

MySQL-Abfrage: MAX() Group By

In MySQL wird die GROUP BY-Klausel verwendet, um Zeilen mit identischen Werten in einem angegebenen zu kombinieren Gruppe, während die Funktion MAX() den Maximalwert in einer bestimmten Spalte innerhalb einer Gruppe zurückgibt.

Problem Anweisung

Gegeben sei eine Tabelle mit den folgenden Spalten:

  • pid (automatisch inkrementierender Primärschlüssel)
  • Zeitstempel (Zeitstempel mit Standardwert)
  • Kosten (Ganzzahl)
  • rid (Ganzzahl)

Das Ziel besteht darin, die PID der neuesten Zeile für jedes einzelne Rid abzurufen. Die erwartete Ausgabe sollte sein:

pid MAX(timestamp) rid
5 2011-04-14 01:06:06 1
3 2011-04-14 01:05:41 2
7 2011-04-14 01:14:14 3

Erste Abfrage

Die folgende Abfrage wurde versucht, um das Problem zu lösen:

SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid

Allerdings Diese Abfrage gab falsche PIDs zurück, da sie die PIDs des ersten Vorkommens von Rid-Werten anstelle des neuesten auswählte Zeitstempel.

Lösungsabfrage

Um die gewünschten Ergebnisse zu erhalten, kann die folgende Abfrage verwendet werden:

SELECT pid, MAX(timestamp), rid
FROM (
    SELECT pid, timestamp, rid,
        ROW_NUMBER() OVER (PARTITION BY rid ORDER BY timestamp DESC) AS rn
    FROM theTable
) AS subquery
WHERE rn = 1
GROUP BY rid

Erklärung

Diese Abfrage verwendet eine Unterabfrage, um die Zeilen für jedes Rid in absteigender Reihenfolge der Zeitstempel zu ordnen mit der Funktion ROW_NUMBER(). Die rn-Spalte weist jeder Zeile einen Rang zu, wobei 1 die Zeile mit dem neuesten Zeitstempel für jedes Rid darstellt.

Die äußere Abfrage filtert dann die Ergebnisse so, dass nur Zeilen mit rn gleich 1 enthalten sind, um sicherzustellen, dass nur die Die letzte Zeile für jedes Rid wird ausgewählt. Die pid-, MAX(timestamp)- und rid-Werte werden nach rid gruppiert, um die gewünschte Ausgabe zu erzeugen.

Das obige ist der detaillierte Inhalt vonWie kann ich mit MAX() und GROUP BY die PID der neuesten Zeile für jede eindeutige RID in MySQL abrufen?. 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