我在Microsoft Access中有一个表,其中包括字段(UN、PSN、Class、ClassAll、PG、Priority).我需要删除基于字段(UN、PSN、Class、ClassAll、PG)的重复记录,但仅保留在字段优先级中具有最低优先级值的记录 我try 了以下几种方法:

DELETE FROM tbl
WHERE (UN, PSN, Class, ClassAll, PG, priority) NOT IN (
    SELECT UN, PSN, Class, ClassAll, PG, MIN(priority) AS MinPriority
    FROM tbl
    GROUP BY UN, PSN, Class, ClassAll, PG
);

但是,这会导致错误: Query must have at least one destination field

下面是一个数据的小例子. 粗体标记的值被认为是重复的,因为这些值在字段(UN、PSN、Class、ClassAll、PG)中相同 在本例中,应删除ID为6589和17的记录,并保留具有最低优先级值(ID 120)的记录

SAMPLE DATA

ID UN PSN Class classAll PG Priority
120 1006 AUDI 2.2 2.2 A 1
2 1950 VW 2.1 2.2,8 A 11
3 1950 VW 2.1 2.2,6.1 B 10
4 1950 VW 2.1 2.2,6.1,8 B 12
6589 1006 AUDI 2.2 2.2 A 2
6 1950 PEUGEOT 2.2 2.2 B 18
17 1006 AUDI 2.2 2.2 A 9

DESIRED OUTCOME

ID UN PSN Class classAll PG Priority
120 1006 AUDI 2.2 2.2 A 1
2 1950 VW 2.1 2.2,8 A 11
3 1950 VW 2.1 2.2,6.1 B 10
4 1950 VW 2.1 2.2,6.1,8 B 12
6 1950 PEUGEOT 2.2 2.2 B 18

实现这一目标的正确方式是什么?

推荐答案

试一试:

DELETE * 
FROM tbl As T1
WHERE T1.priority NOT IN (
    SELECT Top 1 T2.priority
    FROM tbl As T2
    WHERE T1.UN = T2.UN And T1.PSN = T2.PSN And T1.Class = T2.Class And T1.ClassAll = T2.ClassAll
    ORDER BY Priority Asc);

结果:

enter image description here

Sql相关问答推荐

SQL:创建查询以添加减少的总数

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

Select 最大值,但当并列时,从其他列 Select 最大值

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

每组显示一行(表1中的分组值),表2中的不同列表用逗号分隔

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

在WHERE EXISTS子查询中,列返回是否重要?

在SQL查询中查找客户端的最短日期比较列和多行

SQL按组 Select 最小值,当值不存在时为Null

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

当active=1时,是否可以创建id为的唯一索引?

如何在MS Access中基于另外两个表自动填充一个表中的字段?

对现有记录进行分组

Postgresql 生成器列导致语法错误

使用长 IN 子句的 SQL 优化

SQL 将 Varchar 转换为日期

在没有订单的情况下,如何生成一个值为0的顾客天数行

如何根据共同列值从两个表中包含列,但只包含左表中的行

为什么 get_json_object() 无法从存储在 Hive SQL 表中的 JSON 中提取值?

从每行中排除最大元素