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

締切り済みの質問

accessで重複データの削除について

accessというよりSQLについてなのかと思いますが、教えていただけないでしょうか。


重複するIDがあり、1件を除いて他のデータを削除してデータを抽出したいです。

抽出条件としては、[年月日]カラムがあるため、日付が一番直近のものを残したいです。
 ※こちらも重複しております。

また、[フィルタ]カラムが「2」のレコードのみを対象としたいと思っています。

accessの場合、重複クエリを用いるのかと思い、クエリウィザードから作成しましたが
一意とはなりませんでした。


SELECT テーブル1.[共通ID], テーブル1.[連番], テーブル1.[郵便番号], テーブル1.[住所], テーブル1.[担当者名], テーブル1.[年月日], テーブル1.[フィルタ]
FROM テーブル1
WHERE (((テーブル1.[共通ID]) In (SELECT [共通ID] FROM [テーブル1] As Tmp GROUP BY [共通ID] HAVING Count(*)>1 )) AND ((テーブル1.[フィルタ])=2))
ORDER BY テーブル1.[共通ID], テーブル1.[年月日] DESC;


distinctも使ってみましたがうまくできませんでした。
何が原因でしょうか。
申し訳ありませんがご教示いただきたくお願いいたします。

投稿日時 - 2014-06-23 12:52:12

QNo.8650049

困ってます

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

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

回答(1)

ANo.1

重複クエリは、重複するレコードを抽出するもので、
今回は重複するレコードのうち最新以外は削除するということですので、
全然違いますね。

下記でどうでしょうか。

SELECT
テーブル1.[共通ID],
テーブル1.[連番],
テーブル1.[郵便番号],
テーブル1.[住所],
テーブル1.[担当者名],
テーブル1.[年月日],
テーブル1.[フィルタ]
FROM テーブル1
WHERE
テーブル1.[年月日] In
(SELECT TOP 1 年月日 FROM [テーブル1] As Tmp
WHERE Tmp.共通ID = テーブル1.共通ID And Tmp.[フィルタ]=2
OEDER BY 年月日 DESC)
ORDER BY テーブル1.[共通ID], テーブル1.[年月日] DESC;


または、

SELECT
テーブル1.[共通ID],
テーブル1.[連番],
テーブル1.[郵便番号],
テーブル1.[住所],
テーブル1.[担当者名],
テーブル1.[年月日],
テーブル1.[フィルタ]
FROM テーブル1 INNER JOIN
(SELECT 共通ID, Max(年月日) As Max年月日 FROM テーブル1
WHERE [フィルタ]=2
GROUP BY [共通ID]
) As Tmp
ON テーブル1.共通ID=Tmp.共通ID AND テーブル1.年月日=Tmp.Max年月日
ORDER BY テーブル1.[共通ID], テーブル1.[年月日] DESC;

投稿日時 - 2014-06-23 13:46:33

あなたにオススメの質問