sql - 无主键表批量删除的SQL查询
问题描述
我有一个没有主键但应该有的 SQL 表,它是 account_id、键和索引。
但不幸的是,在我注意到这个问题之前,我已经有数百万条目了。
我有从 2000001 到大约 2004000+ 的 account_id,还有几个应该是主键的键,所以如果有更新,只有值会被替换。
下面的示例图片, https://i.imgur.com/g6je2zL.png
account_id 2000846 下应该只有 1 个#betaminutes 和#online_minute,并且值应该是最高的
是否可以对我拥有的所有不同键的每个 account_id 进行批量删除,并且只保存每个 account_id 键的最高值的条目?
谢谢
解决方案
您正在使用大删除将是昂贵的。在 MySQL 中,您可以使用:
delete t
from t join
(select account_id, key, max(value) as max_value
from t
group by account_id, key
having count(*) > 1
) tt
using (account_id, key)
where value < max_value;
注意:如果有最高值的平局,那么这将保持平局,但您的样本数据表明没有平局。
推荐阅读
- python - VS 代码 | Python程序 | 模块导入过程未发生
- c - 我怎样才能对两个数字因子递归求和?
- javascript - javascript中的url验证
- kendo-ui - 如何添加剑道窗口最小化和最大化动作
- python - 如何在 python matplotlib 中保存可缩放图片?
- api - 如何通过 API 从 graylog 中检索日志
- java - java.lang.reflect.inaccessibleobjectexception 无法使 jdk.internal.loader.classloaders
- python - 如何将元组列表中的值分配到数组中
- file - bat 文件没有运行 .exe 应用程序?
- python - ImportError:无法导入名称 lzma