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

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

A 回答 (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;
    • good
    • 0

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

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