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
);
我在 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
);