2011-10-12 12 views
10

Por ejemplo, si los datos de mi aspecto:SQL: seleccione N “más recientes” filas en orden ascendente

 
timestamp | message 
100 | hello 
101 | world 
102 | foo 
103 | bar 
104 | baz 

¿Cómo puedo seleccionar las tres filas más recientes - 102, 103, 104 - en orden ascendente ¿orden?

Lo obvio (para mí) … LIMIT 3 ORDER BY timestamp DESC devolverá las filas correctas, pero el orden es incorrecto.

+1

Usted preguntó por las filas en orden descendente en el título, y _ascending_ orden en la cuestión, que son estás buscando? – jsvk

+1

D'oh! Gracias. Quiero ascender Fijo. –

Respuesta

14

Utilice un selecto interno para seleccionar las filas correctas, y un selecto externa para ordenar correctamente:

SELECT timestamp, message 
FROM 
(
    SELECT * 
    FROM your_table 
    ORDER BY timestamp DESC 
    LIMIT 3 
) T1 
ORDER BY timestamp 
+0

Hrm ... No tengo una instancia en ejecución de postgres útil para probar eso, pero el 'EXPLAIN' de SQLite sugiere que dará como resultado una clasificación (dos si la columna no está indexada). ¿Hay alguna manera de evitar este tipo redundante? –

+2

No; SQL no tiene una operación "inversa". Pero tal vez el lenguaje en el que estás sacando los resultados sí lo hace? –

+1

@David: Espera, ¿estás preocupado por clasificar * tres * registros? ;) –

Cuestiones relacionadas