我刚刚负责删除数据库中的所有重复值。够简单。但他们也希望我通过并检查在该记录的以前的条目中是否有Null值不为空。删除dups并更新空值
假设我们有用户123.用户123没有列出任何原因的邮政编码。但在过去的条目中,他的邮政编码是55555.我应该用过去的条目更新最新的邮政编码,然后删除过去的条目。留给我的只有一个用户123的条目和邮政编码55555.
我只是不确定如何执行更新部分。任何人有任何建议?
谢谢!
我刚刚负责删除数据库中的所有重复值。够简单。但他们也希望我通过并检查在该记录的以前的条目中是否有Null值不为空。删除dups并更新空值
假设我们有用户123.用户123没有列出任何原因的邮政编码。但在过去的条目中,他的邮政编码是55555.我应该用过去的条目更新最新的邮政编码,然后删除过去的条目。留给我的只有一个用户123的条目和邮政编码55555.
我只是不确定如何执行更新部分。任何人有任何建议?
谢谢!
下面介绍如何进行更新。它发现了拉链的最后一个值,然后更新领域,如果必要的话:
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
并将行插入到新表中。
还有一条建议。再问一个问题,更好地理解表中字段的含义,以及要查找哪些字段最后一个值。这将提供更好的解决方案的额外信息。
你可以使用类似以下内容的语句:
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
这样,你在你的重复填写所有空白。那么你只需删除重复项。
这会返回其中一个值,但不会返回最近的值。因此,它不回答这个问题。 –
请问什么数据库引擎? – gbn
你怎么知道一个入口比另一个入口晚?如果您发布了表格定义,这将有所帮助。 (另外,您使用的是什么DBMS?MySQL?PostgreSQL?SQL Server?Oracle?) – ruakh
提供数据库引擎和表架构。我们需要更多信息。 –