我有一个表,其中可以使用订单和项目的串联来标识唯一的记录,如下所示:

ORDER ITEM
1234 001
1234 002
1235 001
1235 002
1235 003
1236 001
1237 001
... ...

该表当前具有每个唯一组合的副本,如下所示:

ORDER ITEM
1234 001
1234 002
1235 001
1235 002
1235 003
1236 001
1237 001
1234 001
1234 002
1235 001
1235 002
1235 003
1236 001
1237 001
... ...

我使用以下子查询来 Select 所有重复的行:

SELECT * FROM (
    SELECT order + item AS ID,
    Row_Number() OVER(PARTITION BY order, item ORDER BY order) as CN
    FROM [schema].[table]
    ) 
AS Q WHERE Q.CN > 1

结果是:

ID CN
1234001 2
1234001 3
1234001 4
1234002 2
1234002 3
1234002 4
1235001 2
1235001 3
1235001 4
... ...

如果这是一个非常简单的问题,请原谅,但是有没有一个简单的修改来将上面的子查询变成一个DELETE语句,并删除它当前 Select 的每条记录(例如,使用CN&>1)?

推荐答案

您可以使用下面的选项删除重复记录

DELETE FROM [schema].[table]
WHERE order + item IN (
    SELECT order + item
    FROM [schema].[table]
    GROUP BY order, item
    HAVING COUNT(*) > 1
)

Sql相关问答推荐

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

我如何计算字母a出现的字符串的次数?

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

带上最后日期(结果)

PostgreSQL-按距离阈值挤压相邻行的性能

如何在android房间中进行多个加入

对现有记录进行分组

具有分组条件的不同计数 (DAX)

将最近的结束日期与开始日期相匹配

在 PostgreSQL 中,如何让多个判断约束引用相同的值数组?

基于变量的条件 WHERE 子句

当该日期的至少两条记录具有相同的持续时间或至少一条记录的持续时间为 0 时,如何标记该日期的所有记录

为重复的项目编号显示正在处理

使用 GROUP BY 时如何创建其他组?

在 SQL 查询中创建滚动日期

如何仅在满足条件时才按顺序在 SQL 中计数?

使用 R 遍历 SQL 查询,每次替换一个变量

CURRENT_ROW 窗口框架上的 SQL 滞后

Athena:从字符串birth_dt列计算年龄

在现有日期列的查询结果中添加周数列