2012-01-08 28 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は、私は、MySQLが長い形式で一時テーブルを使用しませんが疑われるように、これは、非常に重要となる可能性

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 

:類似の方法では、他の人を選択することができます短い形式で(確認されていない)

関連する問題