删除 - TERADATA Group BY

时间:2014-12-05 16:44:13

标签: sql group-by teradata sql-delete

我需要使用与以下查询相同的结果删除此表:

SELECT 
T1.IdCli
,T1.IdType
,T1.DateInic
,T1.Num_Tel
,COUNT (*) 
 FROM dbo.Telphone T1  
  INNER JOIN dbo.Telphone T2
   ON T1.IdCli= T2.IdCli 
   AND T1.DateInic= T2.DateInic
   AND T1.IdType= T2.IdType

WHERE T1.Date <> '2100-12-31'  
GROUP BY 1,2,3,4
HAVING COUNT (*) > 1 

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

/* Create a new table with a row number column that 
   resets over the unique values for the columns in the table. */
CREATE TABLE {DB}.Telphone1 AS
(SELECT T1.IdCli
      , T1.IdType
      , T1.DateInic
      , T1.Num_Tel
      , ROW_NUMBER() OVER 
                     (PARTITION BY T1.IdCli,T1.IdType,T1.DateInic, T1.Num_Tel) AS RowID_
 FROM dbo.Telphone T1) WITH DATA
PRIMARY INDEX({match PI of Telphone});

/* Show Duplicate records */
SELECT T1.IdCli
     , T1.IdType
     , T1.DateInic
     , T1.Num_Tel
  FROM {DB}.Telphone1 T1  
 WHERE RowID_ > 0;

/* Get rid of duplicates */
DELETE 
  FROM {DB}.Telphone1 
 WHERE RowID_ > 1;

/* Get rid of column used for duplicate check */
ALTER TABLE {DB}.Telphone1 DROP RowID_; 

/* Rename tables and preserve original with duplicate records */
RENAME TABLE {DB}.Telphone AS {DB}.Telphone_bak;
RENAME TABLE {DB}.Telphone1 AS {DB}.Telphone;