2017-08-30 99 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 
);