我的任务是删除数据库中的所有重复值。很简单。但他们也希望我查看是否有任何Null值在该记录的先前条目中不是Null。
因此,假设我们有用户123.用户123没有列出任何原因的邮政编码。但是在过去的条目中他有邮政编码55555.我应该用过去的条目用该邮政编码更新最新条目,然后删除过去的条目。只留下一个条目给用户123并且邮政编码为55555。
我只是不确定如何更新部分。有人有什么建议吗? 谢谢!
答案 0 :(得分:2)
以下是如何进行更新的方法。它找到zip的最后一个值,然后在必要时更新该字段:
with lastval as (
select *
from (select id, zip, row_number() over (partition by id order by datecreated desc) as seqnum
from t
where zip is not null
) t
where seqnum = 1
)
update t
set t.zip = lastval.zip
from lastval
where t.id = lastval.id
但是,我建议您使用所需的数据创建一个新表。不要同时删除和更新zilion行,使用如下查询创建表:
select *
from (select t.*, row_number() over (partition by id order by datecreated desc) as seqnum
from t
where zip is not null
) t
where seqnum = 1
将行插入新表中。
还有一个建议。提出另一个问题,更好地了解表中字段的含义,以及要查找哪些字段的最佳值。这将为更好的解决方案提供额外的信息。
答案 1 :(得分:0)
您可以使用类似于以下语句的语句:
update t1
set t1.address = dt.address,
t1.city = dt.city,
... and so on ...
from your_table as t1
inner join
(
select
max(id) as id,
companyname,
max(address) as address,
max(city) as city,
... and so on ...
from your_table
group by companyname -- your duplicate detection goes here
) dt
on dt.id = t1.id
通过这种方式,您可以填补重复项中的所有空白。然后你只需删除重复项。