2011-10-12 52 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:等等,你是否在排序*三条记录时感到烦恼? ;) –