2012-03-01 45 views
30

todos Quiero mostrar los últimos 5 datos ingresados ​​para identificación específica. Mi consulta SQL es,¿Ordenar por fecha y hora en orden descendente?

SELECT id, name, form_id, DATE(updated_at) as date 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY updated_at DESC 

updated_at es DATETIME

Muestra última clase 5 por fecha de entrada no por el tiempo. En la misma fecha, se ordena alfabéticamente.

Supongamos que tengo 3 entradas en la misma fecha con Diff tiempo

digamos

Ajay 1/3/2012 1:15 
John 1/3/2012 1:00 
Bony 1/3/2012 1:10 

después de la consulta de la consulta anterior

lo que conseguimos es

Ajay 1/3/2012 1:15 
Bony 1/3/2012 1:10 
John 1/3/2012 1:00 

Ordenar por fecha luego después alfabéticamente

Lo que quiero es este ..

John 1/3/2012 1:00 
Bony 1/3/2012 1:10 
Ajay 1/3/2012 1:15 

Ordenado por fecha y la hora también ...

+2

Lo que usted dice que desea no está en orden descendente ... –

+0

¿Cuál es la definición de la columna 'updated_at'? –

+0

quiero abreviarlo por fecha y hora también ... –

Respuesta

57

Si desea que los últimos 5 filas, ordenados en orden ascendente, se necesita una subconsulta:

SELECT * 
FROM 
    (SELECT id, name, form_id, DATE(updated_at) AS updated_date, updated_at 
     FROM wp_frm_items 
     WHERE user_id = 11 
     AND form_id=9 
     ORDER BY updated_at DESC 
     LIMIT 5 
    ) AS tmp 
ORDER BY updated_at 

Después de leer la pregunta por 10ª vez, esto puede ser (sólo tal vez) lo que quiere . Ordenar por Fecha descendente y entonces el orden por el tiempo (en la misma fecha) ascendente:

SELECT id, name, form_id, DATE(updated_at) AS updated_date 
FROM wp_frm_items 
WHERE user_id = 11 
    AND form_id=9 
ORDER BY DATE(updated_at) DESC 
     , updated_at ASC 
+1

Si eso es lo que quiere, es mucho mejor revertir el resultado en la aplicación en lugar de hacer esa consulta ¿no? –

+0

@MatthewScragg: Con solo 5 filas devueltas, no creo que importe, ambas están bien. –

+0

Ver los últimos 5 o 10 no es un problema aquí el problema también es corto por el tiempo –

2
SELECT id, name, form_id, DATE(updated_at) as date 
FROM wp_frm_items 
WHERE user_id = 11 && form_id=9 
ORDER BY date ASC 

"DESC" significa descendente pero necesita orden ascendente ("ASC").

2
SELECT * FROM (
       SELECT id, name, form_id, DATE(updated_at) as date 
       FROM wp_frm_items 
       WHERE user_id = 11 && form_id=9 
       ORDER BY updated_at DESC 
      ) AS TEMP 
    ORDER BY DATE(updated_at) DESC, name DESC 

Pruébalo.

+1

@NoobASThreeDeveloper: No, no es innecesario.No es solo la fecha en la columna, también hay tiempo y en la mayoría de los casos los registros no pueden tener la misma fecha y hora. Por lo tanto, se necesita el paso –

+0

@Click: el paso es realmente innecesario. No necesita envolver esto en una subconsulta. Un simple 'ORDER BY DATE (updated_at) DESC, name DESC' tendría el mismo resultado. Sin mencionar que la sintaxis que tienes no es SQL válido (a pesar de que MySQL puede permitirlo). En la consulta externa, no hay 'updated_at' y' ORDER BY DATE (updated_at) 'debe dar como resultado un error. –

+0

@ypercube: Si lo hace, los registros no se ordenarán por 'TIME' también. OP quiere que los registros se ordenen por fecha y hora, no solo por la fecha –

1

Si quiere decir que desea ordenar por fecha primero y luego por los nombres

SELECT id, name, form_id, DATE(updated_at) as date 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY updated_at DESC,name ASC 

Esto ordenar los registros por fecha primero, luego por los nombres

16

poniendo el UNIX_TIMESTAMP hará el truco.

SELECT id, NAME, form_id, UNIX_TIMESTAMP(updated_at) AS DATE 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY DATE DESC 
1

Ésta es una de las formas más sencillas para ordenar por fecha de registro:

SELECT `Article_Id` , `Title` , `Source_Link` , `Content` , `Source` , `Reg_Date`, UNIX_TIMESTAMP( `Reg_Date`) AS DATE 
FROM article 
ORDER BY DATE DESC 
Cuestiones relacionadas