sql group by分组去重问题

img

img


为什么保留的第二条数据,怎样才可以让他保留第一条数据,group不应该保留第1条吗🙃

img

106行的排序desc改为升序asc

select a.* from 表名 a righ joinselect apply_id,max(timetime from 表名 group by apply_id)b on a.apply_id=b.apply_id and a.time=b.time
  1. group by 的目的是分组聚合,它本身并没有所谓的排序功能,不要相信网上说的什么取第1条,在实际开发场景中,应该理解为取随机的一条,将它视为无效数据。
  2. 你题目中的这种sql语法,只在老版本的mysql中才会支持,在mysql8.0之后就默认不支持了,甚至其他数据库绝大多数从一开始就是都不支持的,因为这种写法并不严格,同一个sql多次查询同一个数据甚至可能会出现查询结果不一样的情况。
  3. 在聚合函数查询中,对于非聚合字段,必须放到group by 后面去;反过来,如果出现了group by ,那么select 的字段必须是group by的字段或聚合函数,不能出现其他字段,更不能是select *
  4. 如果你的目的是保留一行,用order by 加 limit就好了;当然也可以使用开窗函数取row_number ,然后在外面再对序号进行过滤

取第一条 应该用limit 1
可以参考下我的笔记:https://jshand.gitee.io/#/course/03-dbms/index?id=_156-%e9%99%90%e5%88%b6%e8%ae%b0%e5%bd%95%e7%9a%84%e8%a1%8c%e6%95%b0

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632