2012-02-27 11 views
1

によって制限が、私は、次のフィールドを持つテーブルがあります最新のアイテムは25個なので、SELECT * FROM table ORDER BY date DESC LIMIT 50mysqlの選択最新の、ソース

追加の要件は、すべてのsource_idから最新の3つだけを選択することです。

レコードはそのような何か、

id | source_id | title | date 
----+-----------+-------+--------- 
    1  2   aaa 2012-1-1 
    2  2   aaa 2012-1-2 
    3  2   aaa 2012-1-3 
    4  2   aaa 2012-1-4 
    5  3   aaa 2012-1-5 
    6  4   aaa 2012-1-6 

を見ればだから私は、私のクエリは項目4,3,2,5,6

を返すようにしたいとのすべてのソースのだから3最も最近の全体の制限は25です。

私はそれが十分明確ではないので、詳細が必要かどうか尋ねてください。ここで

答えて

1

あなたが行く:

SELECT * 
FROM your_table t1 
WHERE 
    (
     SELECT COUNT(*) 
     FROM your_table t2 
     WHERE 
      t1.source_id = t2.source_id 
      AND t1.date < t2.date 
    ) < 3 
ORDER BY source_id, date DESC 

結果:平易な英語で

4 2 aaa 2012-01-04 
3 2 aaa 2012-01-03 
2 2 aaa 2012-01-02 
5 3 aaa 2012-01-05 
6 4 aaa 2012-01-06 

同じsource_idで3つの未満新しい行を持つ行のみを取ることを。

注:(同じsource_idための)第三の最新dateが複数の行で共有されるように起こる場合、これはsource_id当たり3つの以上の行を選択することができます。この状況で「3最新」が何を意味するのかを教えてください。

+0

それは動作します:)ありがとう! – applechief

0
select * from table where source_id in 
    (select distinct source_id from table order by date limit 3) 
LIMIT 25 
+0

3つの最新ソースからすべての行が選択されているように見えます。私は最新の行をソースから3に制限することを検討しています – applechief

関連する問題