2012-02-27 100 views
1

我有一個具有以下字段的表:MySQL的選擇最近,限制由源

  • ID
  • SOURCE_ID
  • 標題
  • 日期

我要選擇25個最近的項目,所以SELECT * FROM table ORDER BY date DESC LIMIT 50

額外的要求是從每個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 

用簡單的英語:只需要有不到3個行與相同source_id行。

注:這可能如果第三最新date(對於相同source_id)每source_id選擇多於3行恰好由多個行共享。讓我知道在這種情況下,「3最新」意味着什麼,如果這是一個問題...

+0

它的作品:)謝謝! – applechief 2012-02-28 17:19:47

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 2012-02-27 19:33:25