MAX() no muestra el resultado esperado en MySQL

Realmente perplejo aquí, por lo que cualquier consejo sería muy apreciado, por favor.

yo en el clients tabla, tengo los siguientes registros para el cliente con ID = 257:

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257

+------+-----+-------------+--------+
| ref  | ID  | client_name | data_1 |
+------+-----+-------------+--------+
| 1123 | 257 | Client257   | 0      |
| 1124 | 257 | Client257   | 163    |
+------+-----+-------------+--------+

Ahora, si agrego un MAX() simple al ref campo, obtengo:

SELECT MAX(ref), ID, client_name, data_1 FROM clients WHERE ID = 257

+------+-----+-------------+--------+
| ref  | ID  | client_name | data_1 |
+------+-----+-------------+--------+
| 1124 | 257 | Client257   | 0      |
+------+-----+-------------+--------+

Debería conseguir:

+------+-----+-------------+--------+
| ref  | ID  | client_name | data_1 |
+------+-----+-------------+--------+
| 1124 | 257 | Client257   | 163    |
+------+-----+-------------+--------+

¿Alguien puede explicar esto por favor? ¿Y qué debo hacer para obtener el resultado deseado?

EDIT:

Se agregó la salida de SHOW CREATE TABLE clients según lo solicitado por @Ilion:

CREATE TABLE `clients` (
 `ref` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `ID` int(11) unsigned NOT NULL,
 `client_name` varchar(75) DEFAULT NULL,
 `data_1` int(11) unsigned NOT NULL DEFAULT '0',
 `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 UNIQUE KEY `ref` (`ref`)
) ENGINE=MyISAM AUTO_INCREMENT=1135 DEFAULT CHARSET=utf8

preguntado el 03 de mayo de 12 a las 16:05

aplique max a data_1 y vea si obtiene el resultado deseado -

¿Estás mostrando tu segunda consulta correctamente? A mí me parece idéntico al primero.

Su sintaxis es incorrecta, no puede seleccionar atributos agregados y no agregados juntos:

@paulslater19. Gracias, mi error. -

Ah, el viejo MySQL y su voluntad de dejar que te dispares con funciones agregadas... Si no AGRUPAS POR las columnas no agregadas en la consulta, tus resultados serán impredecibles. -

3 Respuestas

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257 ORDER BY ref DESC LIMIT 1

MAX() mostrará el valor máximo para esa columna. Mysql luego estaba recogiendo el resto de los datos de la primera fila.

Más bien, esta consulta se asegurará de que está recibiendo la fila datos con la mayor ref

contestado el 03 de mayo de 12 a las 16:05

ayuda esto?

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257 and ref in
    (select max(ref) from clients WHERE ID = 257)

contestado el 03 de mayo de 12 a las 16:05

Podrías hacer eso con seguridad in an =, ya que MAX() solo devolverá un valor único... :) - Y J

Gracias :), Lo intentaré más tarde - neoesperanza

¿Has probado una cláusula de tener? Esto debería funcionar:

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257 having max(ref);

Es la mejor manera de hacer una selección basada en un resultado agregado cuando en realidad no desea agrupar.

contestado el 03 de mayo de 12 a las 16:05

Gracias, pero esto vuelve ref of 1123 y data_1 of 0. ¡Estoy confundido! - user114671

¿Puede agregar la salida de SHOW CREATE TABLE clients a tu pregunta? - Ilion

He agregado a la salida a la pregunta: user114671

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.