2009-05-25 5 views
4
table { 
    id: long 
    name: string 
} 

1235 Fred 
1902 Trever 
5123 George 
6467 Derek 
7868 Joe 
8972 Bob 
9272 Alf 
9842 Hank 

Joes보다 2 레코드를 먼저 반환하고 싶습니다. 오름차순입니다. 올바른 값 즉한계가있는 SQL 정렬? (평범하지 않다)

은 다음과 같아야합니다

5123 George 
6467 Derek 

어떤 생각? 참고 :

  1. 반환 잘못된 행 :

    선택 * 테이블에서 ID < 7868 주문 ID 오름차순 제한에 의해 2

  2. 반환 잘못된 정렬 순서 :

    선택 * 테이블로 id < id로 7868 order desc limit 2

+0

사용되는 데이터베이스는 SQLite입니다. 그러나 다른 RDBMS에 대한 응답을 중지시키지 마십시오. 어쨌든 알게되어서 기쁩니다 : D – Matt

답변

4
SELECT * FROM 
    (select * from table where id<7868 order by id desc limit 2) AS foo 
ORDER BY ID ASC 
+0

알렉스. 놀랍게도 SQLite도 충분히 지원합니다! : D – Matt

+0

아 그래요, SQLite 중첩 된 선택 권리 (뿐만 아니라 다른) - amazin '작은 짐승, 이니셜! -) –

+0

그것은 참으로 - 그것은 구문 분석하지만 외래 키 제약을 시행하지 않습니다 :) – Matt

1

시도 :

*

선택 "테이블"에서 : 먼저 올바른 행을 취득 할 수있는 하위 쿼리를 수행

Select * from (
    select * from table with id<7868 
    order by id desc limit 2 
) as t order by id asc 

, 당신은 PostgreSQL의에서 이후

0

를 재정렬 할 수 있습니다 id < id에 의한 7868 오름차순의 제한 2 오프셋 2

그리고 마찬가지로 MySQL (나는 믿습니다) "제한 2, 2"

"LIMIT 2 OFFSET 2"는 SQLite에서도 작동합니다. (3.6.13)

+0

이 질문에 주어진 데이터를 사용할 때 올바른 결과를 반환하지만, 데이터는 작고 단순한 예제 일뿐입니다. 마찬가지로 "SELECT * FROM table WHERE id IN (5123, 6467) ORDER BY id"는 예제 데이터로 올바른 결과를 제공하지만 일반적인 경우에는 쓸모가 없습니다. – LukeH

+0

안녕하세요. 응답 해 주셔서 감사합니다. 오프셋 자체는 우리가 필요로하는 결과의 시작 위치를 알아야합니다. 제공된 데이터와도 작동하지만 오프셋을 알지 못하는 곳에 사용하기에는 충분히 유연하지 않습니다. 예를 들어 3 개의 결과가 필요한 경우 오프셋을 1로 변경해야합니다.그러나 당신의 노력에 감사드립니다! – Matt