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

アクセスの重複データ削除について質問です。

下記のようなデータがあります。(テーブル名:TEST)
ID 受付日 シリアルNO
1 2009/8/1 AAAB
2 2009/8/1 AAAA
3 2009/8/1 AAAB     ←削除
4 2009/8/1 ABAB
5 2009/8/1 AABB
6 2009/8/2 AABB
7 2009/8/2 AABC
8 2009/8/2 AABB     ←削除
9 2009/8/2 AAAA


<やりたいこと>
受付日が同じで、シリアルNOが重複しているデータがあった場合
IDの小さいデータを1件のみ残して、他はすべて削除。
※重複は2件以上の場合もある。
※シリアルNOが重複していても、受付日が違えば削除しない。

下記のように、シリアルNOの重複データを削除、まではたどりついたのですが
同一日かつ同一シリアルNOのデータを削除、という書き方がわからずに困っています。
お分かりになる方、どうぞ宜しくお願い致します!

・・・・・・・・・・・・・・・・・・・・・・
DELETE *
FROM TEST AS T1
WHERE ID <> (
Select Min(ID) From TEST As T2
Where T2.シリアルNO = T1.シリアルNO
Group By シリアルNO
Having Count(*) > 1);

教えて!goo グレード

A 回答 (2件)

#1です。


Group Byもなくても問題ないですね。

DELETE *
FROM TEST AS T1
WHERE ID <> (
Select Min(ID) From TEST As T2
Where T2.受付日 = T1.受付日
And T2.シリアルNO = T1.シリアルNO);
    • good
    • 2
この回答へのお礼

さっそくご回答いただき、ありがとうございました。
非常に助かりました!!

お礼日時:2009/08/21 13:43

そこまでできたのなら、あとは受付日を追加するだけです。


なお、Having句は付けないほうがいいでしょう。

DELETE *
FROM TEST AS T1
WHERE ID <> (
Select Min(ID) From TEST As T2
Where T2.受付日 = T1.受付日
And T2.シリアルNO = T1.シリアルNO
Group By 受付日, シリアルNO);

この回答への補足

補足を忘れておりました。
Having句 をつけないほうがよい理由は何かあるのでしょうか?
(あまり詳しくないので・・初歩的な質問でしたら申し訳ありません)

補足日時:2009/08/21 13:47
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング