12

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

我有以下查询,它给了我一个“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”获取前 5 个最新条目?如果“some_id”的条目少于 5 个,则可以包含它们,如果这会使事情变得不那么复杂。

非常感谢!

4

2 回答 2

16

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

如何限制 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
于 2012-05-09T12:51:32.247 回答
-3

嗨,请使用Group byand having 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显示结果。

于 2012-04-30T11:45:11.747 回答