2014-09-30 3 views
0

제목은 조금 혼란 총 항목의 금액을 알고 있기없이 순서대로 항목을 건너 뛰기,하지만 난 궁금하네요이 같은 쿼리 할 수있는 방법이 있는지 :SQL은 :

SELECT * FROM table ORDER BY timestamp LIMIT 10 

을하고 만 받아 10 번째 이후의 항목 (또는 10 개 이하의 항목이있는 경우 없음).

EDIT 다른 방법으로 시간 소인, 내림차순으로 주문한 다음 0, (total-someNumber)으로 제한하는 것이 좋습니다.

+0

그래서 처음 10 개 항목을 건너 뛰려면을? –

+0

@AdamJones 예, * EDIT * 전에 무엇입니까. 나는 왜 skip이라는 단어를 생각할 수 없었는지 모르겠다. 3 – StrongJoshua

답변

3

OFFSET을 지정하면 지정된 수 뒤에 행을 가져올 수 있습니다. 이것을 제한과 결합합니다. MySQL에서는 LIMIT [offset], limit을 사용합니다.

예 - 가장 오래된 10 개 기록 이후 10 개 개의 레코드를 얻을 :

SELECT * FROM table ORDER BY timestamp LIMIT 10, 10; # Retrieve rows 11-20 

예 - 최신 5 개 기록 후 20 개 기록을 얻을 :

SELECT * FROM table ORDER BY timestamp DESC LIMIT 5, 20; # Retrieve rows 6-25 

을 당신이 특정 후 모든 행을 얻고 싶다면 숫자 (예 : 10)를 입력하면 다음 절에서 임의로 큰 숫자를 전달합니다.

SELECT * FROM table ORDER BY timestamp LIMIT 10,18446744073709551615; # Retrieve rows 11-BIGINT 

참고 : 18446744073709551615은 서명되지 않은 BIGINT의 최대 값이며 MySQL 설명서의 솔루션으로 제공됩니다.

참조 : http://dev.mysql.com/doc/refman/5.5/en/select.html

+0

내가 원하는 것은 10 번째 항목을 건너 뛰고 나머지는 모두 얻을 수 있어야한다는 것이다. – StrongJoshua

+0

내 대답을 참조하십시오. MySQL에서는 최대 행 수를 지정해야하지만, 설명서에서 제안하는대로 가장 큰 수를 사용하여 오프셋 후 모든 행을 반환합니다 – itsmejodie

0

내가 this 같은 것을 시도하고 단지 (이 경우 N = 10)를 처음 n을 생략 절 행을 추가 할 것입니다.

즉, 링크 된 예를 사용하여 :

SELECT 
    * 
FROM 
    (select @n := @n + 1 RowNumber, t.* from (select @n:=0) initvars, tbl t) 
WHERE 
    RowNumber > 10