› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
pppguest3962
V2EX  ›  MySQL

求表内“N 条留 1 条”的语句(以多字段来判断 N 条)

  •  
  •   pppguest3962 · Oct 2, 2019 · 5391 views
    This topic created in 2563 days ago, the information mentioned may be changed or developed.

    表内字段是这样的:
    id|a|aid|b|bid|size|weight|updatetime

    id 是自增长,a 是 string,aid 是 int,b 也一样,updatetime 是 datetime 类型

    求两条 mysql 语句:
    1、a,aid,b,bid 相同的条目,只保留 updatetime 最新的 1 条数据
    2、a,aid,b,bid 相同的条目,只保留最后加入的单条数据,最后加入的数据,是不是只能以 id 最大值来判断?为什么有 1 的问题了,还要有最后加入的数据来判断了,因为 updatetime 字段内容缺失,现在也搞不懂为什么,只能用 id 最大来判断?

    感谢各位,不急也不会这样伸手了,谢谢大家的热心解答!

    6 replies  •  2019-10-03 11:09:28 +08:00
    kaneg
        1
    kaneg  
       Oct 2, 2019 via iPhone
    手机码字不易,给个基本思路:通过 Group by a,aid,b,bid,max ( uodatetime )拿到 id,这个作为子查询的条件,然后组合 delete 就可以了
    zappos
        2
    zappos  
       Oct 2, 2019 via Android
    我猜数据会更新,id 小的数据如果之后更新,updatetime 会变大。
    eote
        3
    eote  
       Oct 2, 2019
    ```
    SELECT T1.* FROM T T1
    INNER JOIN (SELECT A, AID, B, BID, MAX(UPDATETIME) AS UPDATETIME FROM T GROUP BY A, AID, B, BID) T2
    ON T1.A=T2.A AND T1.AID=T2.AID AND T1.B=T2.B AND T1.BID=T2.BID AND T1.UPDATETIME=T2.UPDATETIME
    ```
    eote
        4
    eote  
       Oct 2, 2019
    取一个时间切片最新数据
    srlp
        5
    srlp  
       Oct 3, 2019 via iPhone
    select a,aid,b,bid from
    (select a,aid,b,bid, row_number() over (partition by a,aid,b,bid order by updatetime desc) as therank) t
    where t.therank=1

    使用 id 排序的话替代上文 updatetime 即可。

    原理是使用了窗口函数 windows function
    srlp
        6
    srlp  
       Oct 3, 2019 via iPhone
    但是旧版本可能不支持 window function,那就要用类似 1 楼的 inner join 了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3588 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 04:43 · PVG 12:43 · LAX 21:43 · JFK 00:43
    ♥ Do have faith in what you're doing.