删除重复项,保留最大值

昨天对商城添加快递费,由于忘记获取快递费的feeid了。用replace into table 语句,导致更新快递费,无论表中有没有记录都添加。

今天通过数据库已查询,里面上千条记录。

里面有expressid和areaid相同的项。

如图:

现在需要删除掉expressid 和areaid两个重复的,只保留一个feeid最大的。即最后一次更改。

需要的结果如图:

思路是什么样的?

1、直接查出重复的,删除

2、查出需要保留的,删除不在这个范围内的。

用第二种比较容易

  • 第一步查出需要保留的。

SELECT *
FROM expressfee as ef
GROUP BY expressid, areaid

这样写虽然也得到了结果,但是并不能确保查询出来的是feeid最大的。

用下面的语句可以做到:

SELECT *
FROM (select * from expressfee order by feeid desc) as ef
GROUP BY expressid, areaid

如果对这点有怀疑,你可以把排序方式更改。

SELECT * 
FROM (select * from expressfee order by feeid asc) as ef
GROUP BY expressid, areaid

结果:

  • 第二步
  • 开始删除

delete from expressfee where feeid not in(
SELECT feeid
FROM (select * from expressfee order by feeid desc) as ef
GROUP BY expressid, areaid)

完成。

顺便批评下一篇文章 "用distinct在MySQL中查询多条不重复记录值" 按照他写的是不行的。

 

转载于:https://www.cnblogs.com/simpman/p/3299171.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值