我有一个包含以下字段的表:
我想选择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个。
我不确定它是否足够清楚所以请询问您是否需要更多详细信息。
答案 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