• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access [SQL]月別ので最新日付取得方法)

Access SQLで月別の最新日付を取得する方法

このQ&Aのポイント
  • Accessで顧客管理をしている場合、月ごとの最新の日付を取得する方法について教えてください。
  • 例えば、顧客ごとに1月1レコードを取得し、同じ月内に顧客が複数のレコードを持っている場合は最新の日付を取得する方法を知りたいです。
  • もし、同じ月内で最新の日付が複数存在する場合は、連番が多い方の日付を取得する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

NOT EXISTSを使ってもよさそうです。 --全角でインデントしています select * from 表 a where not exists (  select * from 表 b  where a.顧客ID = b.顧客ID  and a.月 = b.月  and (a.購入日 < b.購入日 or (a.購入日 = b.購入日 and a.連番 < b.連番)) ); 自レコードと顧客ID・月が同一で、購入日が後のデータor購入日が同一で連番が大きいレコード が存在しないものという条件で取得します。

kazuya_rx93
質問者

お礼

できました!! 助かりました、本当にありがとうございます。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

SQLを考える時は論理の組み立てが大事で、 それをしないで「どうしましょう?」では先に 進みません。以下は理論です。 (1)月、顧客ID毎に集計し、購入日は最大値を取る。 (2)上記クエリと元のデータを結合して、月、顧客ID、  購入日は最大値毎に集計し、連番は最大値を取る。 これを具体化すると以下のようになります。 SELECT A.月,A.顧客ID,B.最大購入日 AS 購入日, MAX(A.連番) AS 連番 FROM 表 AS A INNER JOIN (SELECT 月,顧客ID,MAX(購入日) AS 最大購入日 FROM 表 GROUP BY 月,顧客ID) AS B ON A.月=B.月 AND A.顧客ID=B.顧客ID AND A.購入日=B.最大購入日 GROUP BY A.月,A.顧客ID,B.最大購入日 解説しますと、(SEELCT~)の部分が(1)にあたります。 これをサブクエリと言います。これと元のデータを結合 して、目的のデータを抽出します。英語なので、記述は 理論の組み立てとは反対に構築されます。 尚、こういう処理をVBAでやろうと考えてはいけません。 SQLの何万倍もの処理時間がかかります。できても 却下です。

kazuya_rx93
質問者

お礼

大変参考になりました。 勉強不足でした。

関連するQ&A