2012-01-08 108 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 2012-01-08 17:18:50

+0

你是跳過4比5還是比4?減號在你的符號中意味着什麼? – 2012-01-08 17:20:13

+0

只是4,基本選擇3跳過4再選擇3等等。 – user990767 2012-01-08 17:21:40

回答

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

這將工作假設在ID中沒有空白。這可能不是行被刪除的情況。 – kba 2012-01-08 17:23:16

+0

這正是我想要的,謝謝! – user990767 2012-01-08 17:28:19

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

將選擇(第0)第4,8,...行。以類似的方式,你可以選擇其他:

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

這個SQL可以縮短爲

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

這可能是相當顯著,因爲我懷疑MySQL將使用長表格上的臨時表,但不在更短的形式(未驗證)