由于某些错误,我们的表中有重复的用户条目,我想创建一个临时表,其中包含除最新记录以外的所有行
id name unique_id created_at
-----------------------------------------
1 aaaa 1 2018-01-20 13:40:30
2 aaaa 1 2017-01-20 13:40:30
3 aaaa 1 2016-01-20 13:40:30
4 bbbb 2 2018-01-20 13:40:30
5 bbbb 2 2017-01-20 13:40:30
6 bbbb 2 2016-01-20 13:40:30
7 cccc 3 2018-01-20 13:40:30
8 cccc 3 2017-01-20 13:40:30
9 cccc 3 2016-01-20 13:40:30
为了得到下面的结果,我需要什么样的查询才能将其存储在另一个表中
id name unique_id created_at
----------------------------------------
2 aaaa 1 2017-01-20 13:40:30
3 aaaa 1 2016-01-20 13:40:30
5 bbbb 2 2017-01-20 13:40:30
6 bbbb 2 2016-01-20 13:40:30
8 cccc 3 2017-01-20 13:40:30
9 cccc 3 2016-01-20 13:40:30
3条答案
按热度按时间tag5nh1u1#
DELETE FROM user WHERE id IN (SELECT id, MAX(created_at) from user GROUP BY unique_id)
fivyi3re2#
因为我有数百万条记录,所以我做了类似的事情,使用了3个临时表
--获取单个组中的所有最大值
--join with original(users)表只获取重复记录(忽略单个事件的id)
--用tamp连接重复的\u值\u表并将其存储在结果\u表中
现在,result\表中包含了所有可以稍后删除的值。
js81xvg63#
你似乎在要求:
如果性能是一个问题,您需要一个索引
users(unique_id, id)
.