2009-12-01 16 views
5

parece una pregunta típica pero es diferente.MySQL Orden por columna múltiple combinada (no ordena por campo1 asc, campo2 asc)

Tengo una tabla con un id y 3 campos de marca de tiempo (simplemente). Inicialmente, los 3 campos son nulos y se llenan de valores. Ejemplos de filas son:

id time1  time2  time3 
1 1259625661 1259643563 null 
2 null  1259621231 null 
3 1259625889 null  1259644511 
4 null  1259621231 null 
5 null  null  1259644511 
6 null  1259621231 null 
7 1259625889 null  null 

Lo que necesito es conseguir una lista de los ID de ordenados por la última marca de tiempo (haciendo caso omiso de si está en tiempo1, tiempo2 o time3). Hacer una orden por desc tiempo1, desc tiempo2, desc time3 me da una lista equivocada, ya que las primeras clases de todo el campo tiempo1, luego el segundo, etc ...

resultado esperado es una lista de identificadores.

¿Eso se puede hacer en MySQL en una sola consulta? Gracias

Respuesta

12
SELECT * 
FROM mytable 
ORDER BY 
     GREATEST(
     COALESCE(time1, 0), 
     COALESCE(time2, 0), 
     COALESCE(time3, 0) 
     ) DESC 
+1

La nota de la versión en http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest puede ser útil para el usuario que pregunta. – jensgram

+0

'@ jensgram': buen punto. Agregué el 'COALESCE' para manejar todos los casos. – Quassnoi

Cuestiones relacionadas