Teradata bteq sql 删除 table 中最小(列)的重复记录

Teradata bteq sql to remove duplicate record with min(column) in table

我在 Teradata 中有一个 table。它有 5 列 A,B,C,D,E 。 C 是唯一列,它是 numeric 。我需要通过删除 C 列中具有最小值的重复记录来清理此 table。示例如下

示例

A   B   C   D   E
100 ABC 1   23  24
200 XYZ 4   31  45
100 ABC 3   23  24
300 LMN 6   25  26
200 XYZ 7   31  45

预期输出

A   B   C   D   E
100 ABC 3   23  24
200 XYZ 7   31  45
300 LMN 6   25  26

使用 QUALIFY 语句,它允许您使用 Window 函数过滤查询的结果集:

SELECT *
FROM yourtable
QUALIFY ROW_NUMBER() OVER (PARTITION BY A ORDER BY C DESC) = 1;

这里的 Window 函数是在每组不同的 A 字段上放置一个 row_number(1 到 N),从最高的 C ORDER BY C DESC 开始,然后只选择获得 1.

的记录

对于其他 RDBMS(以及 Teradata),您可以使用相关子查询:

SELECT * 
FROM yourtable t1
WHERE c = (SELECT max(c) FROM yourtable WHERE t1.a = a);

这个问题的解决方案是

DELETE zt FROM table zt
WHERE EXISTS (
    SELECT * FROM table ex
    WHERE ex.A = zt.A
    AND ex.C > zt.C
);