dポイントプレゼントキャンペーン実施中!

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

A 回答 (1件)

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



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

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

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
)

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

テストしてないので、チョンボがあるかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/06 13:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!