You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询每个bot_id对应最新记录,现有GROUP BY语句失效如何解决

问题原因

原SQL语句执行逻辑不符合需求,核心是SQL的执行顺序优先级问题:GROUP BY 执行顺序早于 ORDER BY,所以你实际执行逻辑是先按bot_id分组,直接取了每组存储顺序的第一条记录,再对分组后的少量结果排序,调整排序规则自然不会影响分组时取数的结果。

解决方案

方案1:窗口函数写法(通用标准写法,兼容MySQL8.0+、PostgreSQL、SQL Server等所有支持SQL:2003标准的数据库)

用ROW_NUMBER()窗口函数给每个bot_id分组内的记录按请求时间倒序编号,过滤出编号为1的就是每组最新记录:

SELECT bot_id, id
FROM (
    SELECT 
        bot_id,
        id,
        ROW_NUMBER() OVER(PARTITION BY bot_id ORDER BY request_time DESC) AS row_num
    FROM t_request_history
) AS temp_table
WHERE row_num = 1;

方案2:MySQL5.x兼容写法(针对不支持窗口函数的旧版本MySQL)

先对全表按请求时间倒序排序后再分组,即可让分组时取到每组最新的记录:

SELECT bot_id, id
FROM (
    SELECT bot_id, id
    FROM t_request_history
    ORDER BY request_time DESC LIMIT 1000000
) AS temp_table
GROUP BY bot_id;

注意:添加LIMIT是为了避免高版本MySQL优化器自动忽略子查询内的排序规则,数值可以根据你的表数据量调整到大于总记录数即可。

内容的提问来源于stack exchange,提问作者GhostJumper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:27:01