我有一个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
答案 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