从Netezza表中删除重复项

时间:2016-03-22 15:33:00

标签: sql duplicates netezza

我有一个type2表的场景,我必须删除总行级别的重复项。

让我们将下面的例子视为表格中的数据。

A|B|C|D|E  
100|12-01-2016|2|3|4  
100|13-01-2016|3|4|5  
100|14-01-2016|2|3|4  
100|15-01-2016|5|6|7  
100|16-01-2016|5|6|7  

如果您将A视为关键列,则您知道最后2行是重复的。

一般来说,为了找到重复项,我们使用group by function。

select A,C,D,E,count(1) 
from table 
group by A,C,D,E 
having count(*)>1

这个输出将是100 | 2 | 3 | 4重复,也是100 | 5 | 6 | 7。 但是,只有100 | 5 | 6 | 7仅按类型2复制而不是100 | 2 | 3 | 4,因为该值已在第3次运行中返回,而在第1次加载后不久。 如果我将100 | 5 | 6 | 7中的日期字段添加到组中将不会被视为重复,但实际上它是。

尝试如上所述找出重复项。 重复项应该只有100 | 5 | 6 | 7而不是100 | 2 | 3 | 4。 有人可以帮助SQL帮助。

此致 RAGHAV

3 个答案:

答案 0 :(得分:0)

如果要查看所有重复的行,则需要使用组查询作为子查询,通过查询或过滤器表与您的组连接表。

答案 1 :(得分:0)

wITH CTE AS (select a, B, C,D,E, count(*) 
from TABLE
group by 1,2,3,4,5
having count(*)>1)

sELECT * FROM cte
WHERE B <> B + 1

尝试此查询,看看它是否有效。如果您收到任何错误,请告诉我。

我假设您的列B是日期格式,如果没有,则将其投射到日期

如果您可以看到副本,则只需替换select * to delete

答案 2 :(得分:0)

使用row_number分析函数去掉重复项。

delete from
(
select a,b,c,d,e,row_number() over (partition by a,b,c,d,e) as rownumb
from table
) as a
where rownumb > 1