MySQL:根据列值限制接收的结果数量结合查询

时间:2012-04-27 15:27:36

标签: mysql sql greatest-n-per-group

我已经对这个问题进行过研究,但我找不到解决方案。

我有以下查询给出了“some_id”的列表:

SELECT some_id FROM example GROUP BY some_id

我有以下查询,它将获得“some_id”等于数字的行的5个最新条目的列表。

SELECT * FROM example
WHERE some_id = 1
ORDER BY last_modified DESC
LIMIT 5

如何只使用一个查询,为每个“some_id”从表“example”中获取前5个最新条目?如果“some_id”的条目少于5个,那么可以包含它们,如果这样做的话会更复杂。

非常感谢!

2 个答案:

答案 0 :(得分:9)

在查看以下帖子中的第一个答案时找到答案:

How do I limit the number of rows per field value in SQL?

我修改了它以满足我的特定需求:

SELECT * FROM
(
    SELECT *, @num := if(@some_id = some_id, @num := @num + 1, 1) as row_num,
           @some_id := some_id as some_id
    FROM example
    ORDER BY last_modified DESC
) as e
WHERE row_num <= 5

答案 1 :(得分:-2)

嗨请使用Group byhaving clause查看每个ID的检查限制。

SELECT * FROM `example`
GROUP BY some_id
HAVING count( * ) <= 5
ORDER BY last_modified DESC

它会检查每个some_id并检查number of rows for some_id is <=5是否会显示结果。