2012-02-27 73 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