2011-10-12 90 views
10

例如,如果我的數據是這樣的:SQL:選擇N「最近」行升序

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

如何選擇最近的三個行 - 102,103,104 - 升序訂購?

顯然(對我)… LIMIT 3 ORDER BY timestamp DESC將返回正確的行,但順序不正確。

+1

您要求在標題降序排列行,並在問題,這是_ascending_秩序你在找什麼? – jsvk

+1

D'oh!謝謝。我想要提升。固定。 –

回答

14

使用一個內部的選擇,選擇正確的行和外選擇給他們正確排序:

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

Hrm ...我沒有一個運行的postgres方便的實例,但SQLite的EXPLAIN'表明這將導致一個排序(如果該列未被索引,則爲兩個)。有沒有什麼辦法可以避免這種冗餘排序? –

+2

否; SQL沒有「反向」操作。但是,也許你把語言拉到結果呢? –

+1

@David:等等,你是否在排序*三條記錄時感到煩惱? ;) –