2012-01-08 106 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将使用长表格上的临时表,但不在更短的形式(未验证)