sql - 访问查询:根据最大值删除重复记录
问题描述
我有以下表结构:
我希望能够从表中删除重复的邮件,只为每个邮件帐户留下质量得分最高的邮件。目前我想出了以下SQL代码:
DELETE *
FROM Table
WHERE ( Table.[Email Adress] & Table.[Quality Score] ) NOT IN
(
SELECT (Table.[Email Adress] & Max(Table.[Quality Score])
FROM Table
GROUP BY Table.[Email Adress]
);
但是,当我运行它时,它会询问我一个参数值,并且显然没有按我的预期工作。
你有什么解决办法吗?
解决方案
您可以将查询简化为:
DELETE FROM Table AS t
WHERE t.[Quality Score] <> (
SELECT Max([Quality Score])
FROM Table
WHERE [Email Adress] = t.[Email Adress]
);
不需要,GROUP BY [Email Adress]
但你需要一个WHERE
子句。
或与EXISTS
:
DELETE FROM Table AS t
WHERE EXISTS (
SELECT 1 FROM Table
WHERE [Email Adress] = t.[Email Adress] AND [Quality Score] > t.[Quality Score]
);
如果有重复的分数,那么您可以保留最高分数和最低 id 的行,如下所示:
DELETE FROM Table AS t
WHERE EXISTS (
SELECT 1 FROM Table
WHERE [Email Adress] = t.[Email Adress]
AND ([Quality Score] > t.[Quality Score] OR ([Quality Score] = t.[Quality Score] AND id < t.id))
);
推荐阅读
- python - 生成一个随机数
- javascript - Javascript - 如何创建类似于 html 模式属性的正则表达式
- python - 在终端中构建张量流时遇到错误
- java - 突然NoUniqueBeanDefinitionException
- testng - 多次运行testNG测试后如何生成诱惑报告
- vba - 如何用 InputBox 的空文本框区分“取消”和“确定”?
- servlets - JAVA 迁移 1.6 到 1.8 和 11
- java - Hadoop Map Reduce - Iterable 上的嵌套循环
将它们写入上下文时减少忽略文本结果中的值 - r - 如果两个向量之间存在 grep 匹配,则返回数据框的不同列
- javascript - XMLHttpRequest:确定链接是否不会返回 4xx 状态的最快方法?