mysql选择最新,按源限制

时间:2012-02-27 19:04:11

标签: mysql sql

我有一个包含以下字段的表:

  • 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个。

我不确定它是否足够清楚所以请询问您是否需要更多详细信息。

2 个答案:

答案 0 :(得分: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 的行<较新行。

注意:如果第三个最新的source_id(对于相同的date)恰好由多个行共享,则每个source_id可以选择3行以上。让我知道“3最新”在这种情况下意味着什么呢?

答案 1 :(得分:0)

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