こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

重複レコードのある項目を比較し更新する方法

nameで重複しているレコードをDateの
最新の日のレコードのIDをTGT_IDに入れたいのですが

select * from テーブル名
where name in (
select name from テーブル名
group by name
having count(*) > 1
)
と重複したカラムを抽出まではできるのですが
そこからどうしたらいいのか分かりません
どなたかご教授をお願いします。



IDnamedatetgt_id
1A200404032
2A200406252
3B200404294
4B200406234

投稿日時 - 2005-07-04 20:46:12

QNo.1491839

すぐに回答ほしいです

質問者が選んだベストアンサー

タイトルに書かれているように、”更新”するのが最終目標なんですよね?

更新するのであれば...

(分析関数の使えるオラクルの場合)

update テーブル x
set
tgt_id
=
(select id from
(select id,row_number() over(partition by name order by date desc) R
from テーブル y where x.name=y.name) where R=1)
where
name in
(
select name from テーブル名
group by name
having count(*) > 1
)

と書きたいところだけど、サブクエリの相関条件がネストが深くてエラーになる
はずなので、効率を犠牲にして・・

update テーブル x
set
tgt_id
=
(select id from
(select id,name,row_number() over(partition by name order by date desc) R
from テーブル y) z where z.name=x.name and R=1)
where
name in
(
select name from テーブル名
group by name
having count(*) > 1
)

と書くしかないように思います。

テストしてないので、チョンボがあるかもしれません。

投稿日時 - 2005-07-05 03:20:28

お礼

チョンボはありませんでした!!
完璧です。
ありがとうございました。

投稿日時 - 2005-07-06 13:06:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)