MySQL-Abfrage, MAX () + GROUP BY

Daft SQL Frage. Ich habe eine Tabelle etwa so ('pid' ist auto-increment primary col)

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;

Eigentlichen Tabellendaten:

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

Möchte ich, um die PID der aktuellen Zeile für jedes Los (1 Folge pro unique RID). Für die Beispieldaten, die ich möchte:

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

Ich habe versucht die folgende Abfrage ausführen:

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

und ich bekomme:

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

Den PID zurückgegeben wird, ist immer das erste auftauchen der PID für eine RID (Zeile /pid 1 ist frst Zeit Los 1 verwendet wird, Zeilen - /pid 3 in der ersten RID-2 verwendet wird, Zeilen - /pid-7 ist die erste Zeit entfernen 3 verwendet wird). Obwohl die Rückgabe der max timestamp für jedes Los, die pids sind nicht die pids für den Zeitstempel aus der ursprünglichen Tabelle. Wie Sie die Abfrage würde mir die Ergebnisse, die ich Suche?

InformationsquelleAutor der Frage codinghands | 2011-04-14

Schreibe einen Kommentar