2011-10-12 7 views
10

例えば、私のデータは次のように見れば:SQL:選択N昇順で「最新の」行

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

私は、最新の3つの行を選択するにはどうすればよい - 102、103、104 - 昇順を注文?

明白な(私に)… LIMIT 3 ORDER BY timestamp DESCは正しい行を返しますが、順序は正しくありません。

+1

あなたはタイトルに降順で行を求め、そして問題の_ascending_ため、ですあなたが探している? – jsvk

+1

D'oh!ありがとう。私は上昇したい。一定。 –

答えて

14

が正しい行を選択するために、内側のSELECTを使用し、それらを正しく注文する外側の選択:

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

Hrm ...私はそれを試してみるのに便利なpostgresのインスタンスを持っていませんが、SQLiteの 'EXPLAIN'はソートになります(カラムがインデックスされていない場合は2つ)。この冗長なソートを避ける方法はありますか? –

+2

いいえ。 SQLには「逆」操作はありません。しかし、おそらくあなたが結果を引き出している言葉は何ですか? –

+1

@David:待って、あなたは* 3つの*レコードをソートしているのですか? ;) –