2011-10-12 2 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 : 잠깐, 당신은 * 3 개의 레코드를 정렬하는 것에 초조해하고 있습니까? ;) –