• 締切済み

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も使ってみましたがうまくできませんでした。 何が原因でしょうか。 申し訳ありませんがご教示いただきたくお願いいたします。

みんなの回答

回答No.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;

関連するQ&A