【问题标题】:MySQL: Limiting number of results received based on a column value | Combining queriesMySQL:根据列值限制接收到的结果数|组合查询
【发布时间】:2012-04-27 15:27:36
【问题描述】:

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

我有以下查询,它为我提供了“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

如何仅使用一个查询从“example”表中为每个“some_id”获取前 5 个最新条目?如果“some_id”的条目少于 5 个,则可以将它们包含在内,如果这会使事情变得不那么复杂。

非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我发现我必须添加变量的初始化:SELECT ... FROM example, (SELECT @some_id:=0, @num:=0) as init ...
    • 你不得不提到,如果没有ORDER BY 子句,这种方法是行不通的。
    • 完全同意@Green,ORDER BY是必填项
    【解决方案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 &lt;=5 然后将显示结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2021-10-23
      • 2013-09-29
      • 1970-01-01
      • 2023-03-30
      • 2011-01-17
      相关资源
      最近更新 更多