删除重复项,保留最大值

昨天对商城添加快递费,由于忘记获取快递费的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中查询多条不重复记录值" 按照他写的是不行的。

 

posted @ 2013-09-03 17:35  simpman  阅读(2023)  评论(0编辑  收藏  举报