Frage:
Wie rufen Sie die PID der letzten Zeile ab? für jede RID in einer Tabelle mithilfe einer MySQL-Abfrage, die MAX() und GROUP BY kombiniert?
Beispiel Daten:
CREATE TABLE theTable ( `pid` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `cost` INT UNSIGNED NOT NULL, `rid` INT NOT NULL, ) Engine=InnoDB; INSERT INTO theTable (`pid`, `timestamp`, `cost`, `rid`) VALUES (1, '2011-04-14 01:05:07', 1122, 1), (2, '2011-04-14 00:05:07', 2233, 1), (3, '2011-04-14 01:05:41', 4455, 2), (4, '2011-04-14 01:01:11', 5566, 2), (5, '2011-04-14 01:06:06', 345, 1), (6, '2011-04-13 22:06:06', 543, 2), (7, '2011-04-14 01:14:14', 5435, 3), (8, '2011-04-14 01:10:13', 6767, 3) ;
Gewünschtes Ergebnis:
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
Falsche Abfrage:
SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
Diese Abfrage würde die PID des ersten Vorkommens jeder RID zurückgeben, nicht die spätestens.
Korrekte Abfrage:
Um die PID der neuesten Zeile für jede RID abzurufen, können Sie die folgende Abfrage verwenden:
SELECT pid, MAX(timestamp) AS latest_timestamp, rid FROM theTable GROUP BY rid HAVING latest_timestamp = MAX(timestamp)
Diese Abfrage verwendet zunächst die GROUP BY-Klausel, um Zeilen nach der RID-Spalte zu gruppieren. Anschließend wird mit der Funktion MAX() der maximale Zeitstempel für jede Zeilengruppe berechnet. Schließlich werden die Ergebnisse mithilfe der HAVING-Klausel gefiltert, um nur die Zeilen mit dem neuesten Zeitstempel für jede RID beizubehalten.
Das obige ist der detaillierte Inhalt vonWie erhalte ich mit MAX() und GROUP BY die neueste PID für jede RID in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!