2011-10-12 10 views
10

Na przykład, jeśli moje dane wyglądać następująco:SQL: wybierz N „Nowości” wiersze w kolejności rosnącej

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

jaki sposób można wybrać trzy ostatnie rzędy - 102, 103, 104 - w kolejności rosnącej zamówienie?

Oczywisty (dla mnie) … LIMIT 3 ORDER BY timestamp DESC zwróci prawidłowe wiersze, ale kolejność jest niepoprawna.

+1

Pytałeś dla wierszy w kolejności malejącej w tytule, a _ascending_ porządek w pytaniu, które są ty szukasz? – jsvk

+1

D'oh! Dzięki. Chcę się wznieść. Naprawiony. –

Odpowiedz

14

Zastosowanie wewnętrzne Wybierz, aby wybrać odpowiednie wiersze i zewnętrzną wybierz zamówić je poprawnie:

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

Hrm ... Nie mam działającej instancji postgreS-a przydatnej do wypróbowania tego z, ale SQLite 'EXPLAIN' sugeruje, że spowoduje to sortowanie (dwa jeśli kolumna nie jest indeksowana). Czy istnieje sposób na uniknięcie tego zbędnego rodzaju? –

+2

Nie; SQL nie ma operacji "reverse". Ale może język, w którym wyciągasz wyniki, robi? –

+1

@David: Czekaj, czy niepokoisz się sortowaniem * trzech * rekordów? ;) –

Powiązane problemy