我在Teradata有一张桌子。它有5列A,B,C,D,E。 C是唯一列,它是数字。我需要通过删除C列中具有最小值的重复记录来清理此表。示例如下所示
实施例
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
答案 0 :(得分:0)
使用QUALIFY语句,它允许您使用窗口函数过滤查询的结果集:
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);
答案 1 :(得分:0)
解决方法是
DELETE zt FROM table zt
WHERE EXISTS (
SELECT * FROM table ex
WHERE ex.A = zt.A
AND ex.C > zt.C
);