我剛剛負責刪除數據庫中的所有重複值。夠簡單。但他們也希望我通過並檢查在該記錄的以前的條目中是否有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
提供數據庫引擎和表架構。我們需要更多信息。 –