2012-01-08 4 views
0

다음과 같이 작동해야하는 특정 레코드 집합을 선택하려고합니다.모든 n 번째 레코드를 선택하는 방법은 무엇입니까?

쿼리 1은 ID를 선택해야합니다. = 1,2,3 건너 뛰기 4 - 5,6,7 건너 뛰기 8 - 9,10,11 12 등을 건너 뜁니다. 쿼리 2는 매 4 번째 ID = 4,8,12,16 등을 선택해야합니다.

나는 모든 4 레코드를 선택하려면이 코드 발견 :

SELECT * 
FROM (
    SELECT 
     @row := @row +1 AS rownum, noun 
    FROM (
     SELECT @row :=0) r, nouns 
    ) ranked 
WHERE rownum %4 =1 

나는 아직 테스트하지 않은,하지만 난 그냥 작동한다고 가정하지만, 나는 첫 번째 쿼리를 할 수 있습니까?

감사

+0

WHERE rownum % 4! = 1'? – a1ex07

+0

4시에서 5시 또는 4시를 건너 뛰고 있습니까? 귀하의 표기법에서 마이너스 기호는 무엇을 의미합니까? –

+0

그냥 4, 기본적으로 3 건너 뛰기 4를 선택하고 3을 다시 선택하십시오. – user990767

답변

2
select * from table where id mod 4 <> 0 
+1

ID에 틈이 없다고 가정하면 작동합니다. 이것은 행이 삭제 된 경우가 아닐 수 있습니다. – kba

+0

그게 정확히 내가 원하는, 감사합니다! – user990767

2
SELECT * 
FROM (
    SELECT 
     @row := @row +1 AS rownum, noun 
    FROM (
     SELECT @row :=0) r, nouns 
    ) ranked 
WHERE rownum %4 =1 

는 (0 번) 4, 8, ... 행을 선택합니다. 유사한 방법으로 당신은 다른 사람을 선택할 수 있습니다

이 SQL은

SELECT 
    @row := @row +1 AS rownum, noun 
FROM 
    (SELECT @row :=0) r, 
    nouns 
WHERE (@row % 4) [=|<>] 1 

단축 할 수

SELECT * 
FROM (
    SELECT 
     @row := @row +1 AS rownum, noun 
    FROM (
     SELECT @row :=0) r, nouns 
    ) ranked 
WHERE rownum %4 <> 1 

이 내가 MySQL은 긴 양식에 임시 테이블을 사용 의심으로 매우 중요 할 수 있지만 수 짧은 양식 (확인되지 ​​않음)

관련 문제