プロが教えるわが家の防犯対策術!

一部だけ重複しているレコードの削除について教えてください。
検索したのですが、よくわかりませんでした。

f1       f2       f3       f4        f5
-----    -----    -----    -----     -----
1       2005     T      20       A
2       2007     S      20      B
3       2003     S      20      C
4       2008     T      30      A
5       2005     T      30      C
6       2008     N      30      B
7       2007     T      20      D

というようにあったとき、f3とf4が同じであった場合はf2の値がもっとも大きいもの一つを残して他のレコードを削除するというSQL文を考えています。
つまりこの場合にはf1が2,4,7のものを残したいのです。
この時のSQL文はどのようになるのでしょうか。
よろしくお願いします。

A 回答 (1件)

>f1が2,4,7のものを残したい



この場合、f1=6のデータは残しますか?残しませんか?

とりあえずフロー的にはこんな感じで

DELETE h0 FROM hoge AS h0
INNER JOIN (
SELECT f1
FROM hoge AS h1
INNER JOIN (
SELECT f3,f4,MAX(f2) AS max_f2
FROM hoge
GROUP BY f3,f4
) AS h2 ON h1.f3=h2.f3 AND h1.f4=h2.f4 AND h1.f2!=h2.max_f2
) as temp USING(f1)

これだと、f1=2,4,6,7が残ります
    • good
    • 0
この回答へのお礼

f1=6も残したかったのです。
ありがとうございました!

お礼日時:2010/01/14 17:03

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

関連するカテゴリからQ&Aを探す