Daft SQL question. Tengo una tabla como tal ('PID' es autoincrementación col primaria)Consulta de MySQL, MAX() + GROUP BY
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;
datos de la tabla real:
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)
;
Quiero obtener el PID de la última fila para cada deshacerse (1 resultado por RID único). Para los datos de ejemplo, me gustaría:
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
He tratado de ejecutar la siguiente consulta:
SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
y me sale:
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
El PID devuelto es siempre la primera aparición de PID para un RID (row/pid 1 es la primera vez que se usa 1, row/pid 3 la primera vez que se utiliza RID 2, row/pid 7 es first time rid 3). Aunque devuelven la marca de tiempo máxima para cada librado, los pids no son los pids para las marcas de tiempo de la tabla original. ¿Qué consulta me daría los resultados que estoy buscando?
Se puede mostrar el resultado de la consulta exacto que está ejecutando? –
Se ha actualizado la pregunta :) – codinghands
posible duplicado de [Obtener la fila que tiene el valor Máx. Para una columna] (http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max- value-for-a-column) – outis