2011-09-05 24 views
9

En mi consulta SQL estoy seleccionando datos con GROUP BY y PEDIDOS POR cláusulas. La tabla tiene el mismo numbers en varias filas con diferentes tiempos en cada fila. Así que creo que quiero aplicar una cláusula GRUPO POR.MySQL - utilizando GROUP BY y DESC

Sin embargo, en los resultados devuelve la hora más antigua con el número, pero necesito la hora más reciente.

SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC 

La consulta aparece como si primero debe aplicarse GROUP BY y luego ORDER BY ... pero los resultados no parecen funcionar de esta manera.

¿Hay alguna manera de arreglar esto?

+3

[En los documentos] (http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html) el comportamiento que obtiene si select columnas que no están agrupadas por se llama explícitamente como "indeterminado" en el caso de que tengan múltiples valores por grupo. No puedes confiar en ningún comportamiento en particular. ¿Necesita toda la fila o simplemente 'números, máximo (tiempo)' –

+0

¿Puede proporcionar algunas filas de datos con el resultado que espera? –

+0

Gracias chicos, me movieron a la dirección correcta. – user1946705

Respuesta

14

solución alternativa es volver a escribir la consulta como:

SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers; 
+3

P.S. esto causaría un golpe de rendimiento – jbrond

+4

En teoría, no puede garantizar que siempre obtendrá el mismo resultado. – Karolis

+1

@Karolis estuvo de acuerdo, su respuesta parece ser la más correcta – feeela

13
SELECT * 
FROM table t 
WHERE time = (
    SELECT max(time) 
    FROM table 
    WHERE t.numbers = numbers 
) 
-4
SELECT * FROM TABLE GROUP BY numbers DESC; 

Esto le dará último disco del grupo.

Gracias

+0

Esto no responde la pregunta. Quieren ordenar antes de agrupar. –