2017-07-31 4 views
1

テーブルにiciphers_idというフィールドがあります。各iciphers_idには、そのテーブルに複数のレコードがあります。制限を使用して特定のidの複数のレコードを取得する方法

iciphers_idのレコードを取得したいとします。以下のクエリは、次のIDのすべてのレコードを取得します。

SELECT * FROM MYTABLE WHERE iciphers_id IN (200,201,202) 

私は、各iciphers_idのもの、特定のiciphers_idが、10レコードのすべてのレコードを取得するためにクエリを書きたいです。私は200201202である各iciphers_idのための10件のレコードを取得したい、これ以上のクエリのみ10レコードを返す

SELECT * FROM MYTABLE WHERE iciphers_id IN (200,201,202) LIMIT 10. 

試してみました。

注:私はちょうど上記のクエリに3つのiciphers_idを追加しました。それらはそれ以上(何百も)することができます。

Iciphers IDは100以上である可能性があります。たぶん私はクエリのような間に使用する必要がありますwhere iciphers_id >= 200 AND Iciphers_id <= 300

+0

3つ以上であってもよく、または3以上になりますか?これを決めるのは何ですか?それはすべて異なっているのですか、それは増分ですか? – Matt

+0

@Asfandyar Khanテーブル内の 'iciphers_id'ごとにいくつのレコードが存在するでしょうか? –

+0

1つの 'iciphers_id'に対して10〜100,000の倍数にすることができます –

答えて

-1

あなたが試してみてください。

SELECT * 
    FROM 
    (SELECT * , 
        @iciphers_id_rank := IF(@current_iciphers_id = iciphers_id, @iciphers_id_rank + 1, 1) AS iciphers_id_rank, 
        @current_iciphers_id := iciphers_id 
     FROM MYTABLE WHERE iciphers_id IN (200,201,202) 
     ORDER BY iciphers_id ASC 
    ) temp 
    WHERE iciphers_id_rank >= 1 AND iciphers_id_rank <= 10 ; 
+0

動作しません!全体で最初の30レコードを取得します。 –

+0

私は答えを更新しました。今すぐ試すことができます。私はそれがあなたが必要とするように動作すると思います。 –

+0

100k +レコードを返す前に、50,000 +レコードを返しています。私はクエリが上記の3つのiciphers_idのために30レコードしか返さないようにしたい –

-1
select 
    -- ids.iciphers_id, -- this is not necessary 
    TT.* 
from 
    ( select distinct iciphers_id 
     from MYTABLE 
     where iciphers_id > 200 and iciphers_id < 300 
    ) ids 
    cross apply 
    (
     select MT.* 
     from MYTABLE MT 
     where MT.iciphers_id = ids.iciphers_id 
     limit 10 
    ) TT 
+0

'select top 10'でエラーを出します –

+0

どこかでclasueして削除した後に" limit 10 "を入れてみてください'08 ' –

+0

エラーがありますあなたのSQL構文では、クエリの近くに 'クロス適用' ... –

関連する問題