Teradata bteq sql删除表中min(列)的重复记录

时间:2017-08-30 11:54:19

标签: database teradata

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

2 个答案:

答案 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
);