2017-08-30 109 views
0

我在Teradata中有一个表。它有5列A,B,C,D,E。 C是唯一的列,它是数字。我需要通过删除C列中具有最小值的重复记录来清理此表。如下图所示Teradata bteq sql删除表中的最小(列)重复记录

例如

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

使用QUALIFY声明,允许您使用视窗功能筛选结果集的查询:

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

这里的窗口函数是在每组disti上放一个row_number(1到N) nct A字段以最高的C ORDER BY C DESC开头,然后选择只有1的记录。


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

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

您的查询将只显示独特的行构成有最大(c)。我想删除min(c)的重复行。请任何想法吗? –

+0

我得到的溶液 - DELETE FROM ZT ZT表WHERE EXISTS( SELECT * FROM表前 WHERE ex.A = zt.A AND ex.C> zt.C );谢谢大家 –

0

对此的解决方案是

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