You need to enable JavaScript to run this app. MySQL Group By问题:如何按NewID去重获取对应最大id记录
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Group By问题:如何按NewID去重获取对应最大id记录

MySQL按NewID去重保留最高id的查询调整方案

基础场景

现有tb_detail表结构与测试数据如下:

id      NewID   SenderID    ReceiverID  msg     msgType         TimeStamp
1       5       9           8           dfdf    1           7-03-2021 6:10 AM
2       4       9           8           dfdf    1           7-03-2021 6:11 AM
3       3       9           8           dfdf    1           7-03-2021 6:13 AM
4       5       9           8           fgdf    1           7-03-2021 6:16 AM

需要实现的查询目标:

  • 按NewID维度去重,每个NewID仅保留对应最高id的记录,剔除冗余重复数据
  • 结果集按最高id值倒序排列,最高id的记录排在最前端
  • 输出字段为聚合得到的最高id(别名_maxid)、对应的NewID,匹配如下预期结果:
    _maxid      NewID
    4           5
    3           3
    2           4
    

现有查询的问题根源

当前执行的语句:

SELECT MAX(id) _maxid , NewID 
FROM tb_detail
GROUP BY id 
ORDER BY id DESC

错误点在于分组维度选错了:语句按id字段分组,而id是主键、每个值唯一,相当于每行单独成一组,MAX(id)的计算结果自然等于分组自身的id值,根本没有对重复的NewID做聚合过滤,最终才会把id=1、NewID=5的重复冗余记录也查出来,和预期不符。

正确的调整写法

核心改动是把分组维度从id替换为需要去重的NewID,让数据库先按NewID聚合计算每个分组的最大id,再按最大id倒序排列:

SELECT MAX(id) AS _maxid, NewID
FROM tb_detail
GROUP BY NewID
ORDER BY _maxid DESC;

语句执行后完全匹配预期结果:

  • NewID=5分组下的最大id为4
  • NewID=3分组下的最大id为3
  • NewID=4分组下的最大id为2
  • 按_maxid倒序排序后,输出顺序和预期完全一致。

补充:如果后续需要获取这些最大id对应的全量表字段(比如msg、时间戳等完整记录),可以将上述聚合结果作为临时集,通过id关联原表取对应行的全量数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 12:15:03