表内字段是这样的:
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 最大来判断?
感谢各位,不急也不会这样伸手了,谢谢大家的热心解答!
1
kaneg 2019-10-02 15:53:00 +08:00 via iPhone
手机码字不易,给个基本思路:通过 Group by a,aid,b,bid,max ( uodatetime )拿到 id,这个作为子查询的条件,然后组合 delete 就可以了
|
2
zappos 2019-10-02 17:44:15 +08:00 via Android
我猜数据会更新,id 小的数据如果之后更新,updatetime 会变大。
|
3
eote 2019-10-02 17:44:57 +08:00
```
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 ``` |
4
eote 2019-10-02 17:45:58 +08:00
取一个时间切片最新数据
|
5
srlp 2019-10-03 11:03:40 +08:00 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 |
6
srlp 2019-10-03 11:09:28 +08:00 via iPhone
但是旧版本可能不支持 window function,那就要用类似 1 楼的 inner join 了
|