zoukankan      html  css  js  c++  java
  • 删除重复项,保留最大值

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

    如果感觉不错,请 一个!
    by simpman
  • 相关阅读:
    【9018:2221】[伪模板]可持久化线段树
    【9018:2208】可持久化线段树2
    【9018:2207】可持久化线段树1
    【POJ2187】Beauty Contest
    2017/11/22模拟赛
    2017/11/3模拟赛
    [AtCoder 2702]Fountain Walk
    [AtCoder3856]Ice Rink Game
    20170910模拟赛
    20170906模拟赛
  • 原文地址:https://www.cnblogs.com/simpman/p/3299171.html
Copyright © 2011-2022 走看看