お世話になります。
Accessで顧客管理をしています。
【出力条件】
(1) 顧客IDごとに1月1レコード
(2) 同月内に顧客IDが2レコード以上ある場合は最新の購入日
(3) (2)が2レコード(同月内最新の購入日が2レコードある場合は、連番が多い方)
言葉でうまく説明できないのですが・・・
月 購入日 顧客ID 連番
--------------------------
04 2010/04/01 a-136 001
04 2010/04/09 a-136 001
04 2010/04/09 a-136 002
04 2010/04/10 b-991 001
04 2010/04/11 b-991 001
04 2010/04/11 b-991 002
04 2010/04/12 b-991 001
04 2010/04/13 b-991 001
05 2010/05/05 a-136 001
05 2010/05/13 e-991 001
05 2010/05/13 e-991 002
05 2010/05/30 s-333 001
このような表の場合、出力結果を
月 購入日 顧客ID
-----------------------
04 2010/04/09 a-136 002
04 2010/04/13 b-991 001
05 2010/05/05 a-136 001
05 2010/05/13 e-991 002
05 2010/05/30 s-333 001
のように出すクエリー(SQL文)を教えて頂けますでしょうか?
もし、クエリーが無理ならVBAでもよいのでどなたかご教示お願い致します。
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購入日が同一で連番が大きいレコード
が存在しないものという条件で取得します。
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の何万倍もの処理時間がかかります。できても
却下です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- その他(データベース) accessについて 2 2022/05/31 16:58
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- Excel(エクセル) 関数の式を教えてください 2 2022/04/04 11:15
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 営業・販売・サービス お客様先常駐のSEです。常駐しながら新規顧客の営業を行う方策などがあれば教えてください。 4月から新 3 2023/05/25 07:44
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access フォームのデータがテー...
-
Accessで名寄せグループの関係...
-
MySQLで顧客単位に注文回数を付...
-
Access レコードロックについて...
-
Excel 2019 のピボットテーブル...
-
Accessでテーブルをデータシー...
-
Accessでコードを入れると名前...
-
IT用語について質問です。 以前...
-
ACCESSのクエリで集計で、先頭...
-
Accessで、固定アルファベット+...
-
Accessのリンクテーブルのパス...
-
SUBSTRING 関数に渡した長さの...
-
受注受付期間とはなんですか?...
-
Accessでテーブルの値をテキス...
-
主キーはオートナンバー型のID...
-
BIOSでAHCIに設定したいが、項...
-
SQL EXISTS演算子について
-
必須入力項目と入力必須項目
-
Accessのことで教えてください...
-
Access テキスト型に対する指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースの1要素に複数デー...
-
Access IF文でテーブルに存在し...
-
Access VBAでクエリーのレコー...
-
別のDBからテーブルをコピーす...
-
ACCESS で マクロの中でフィ...
-
ワードでの単純作業の効率化に...
-
Access 既に開いているフォー...
-
Access フォームのデータがテー...
-
ワードで保存するファイル名の...
-
シングルクォーテーションとダ...
-
Access レコードロックについて...
-
顧客IDを入力すると顧客名や住...
-
Accessで名寄せグループの関係...
-
Accessデータベースで行と列を...
-
ADOでレコードを閉じるタイミン...
-
Access 縦(行)のデータを横(列)...
-
ファイルメーカーの集計につい...
-
Access 新規入力画面にするコー...
-
Access クエリ このレコードセ...
-
Access2013VBA 複数のテーブル...
おすすめ情報