SQLで条件抽出するためのACCESSクエリーについて

このQ&Aのポイント
  • 以下のACCCESSテーブルデータに対して、IDがかぶっている場合は1行とし、直近利用日、利用回数、利用金額、経過日数の条件でクエリー抽出したいです。
  • 経過日数の計算には、クエリー実行時に入力される日付を使用します。
  • また、テーブルに他の列がある場合は基本的に全列を表示させるようにします。
回答を見る
  • ベストアンサー

ACCESSクエリーについて(条件抽出等2)

以下のACCCESSテーブルデータがあります。 ID    利用日 利用回数 利用金額 c0096 2013/10/02 1   2000 c0096 2013/10/04 2   3000 c0096 2013/10/11 3   4000 c0096 2013/11/11 4   2200 c0096 2013/11/22 5   1000 c0096 2013/12/02 6 4000 c0135 2013/12/03 1 2100 c013 52013/12/07 2 4100 これをIDがかぶっているものについては1行とし、 かつ以下、 ・直近利用日 ・利用回数・・・同一ID行数で判断 ・利用金額・・・累積額 ・経過日数・・・yyyymmdd - 直近利用日 ※ yyyymmdd はクエリー実行時に入力する の条件でクエリー抽出したいのですが、可能でしょうか。 (SQL使用を希望) ※難しければ経過日数の箇所はなくても構わないです。 イメージ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ yyyymmdd を パラメーターで、 2013/12/10 とした場合 ID 直近利用日 利用回数 利用金額   経過日数 c0096 2013/12/02 6 16200     8 c0135 2013/12/07 2 6200 3 上記となる。 またテーブルについて、上記以外にも列があった場合、基本全列を 表示させるという指示は組めますでしょうか。 お手数をおかけしますmm 関連する内容 http://okwave.jp/qa/q8768143.html

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8508/19344)
回答No.2

クエリで書くと、こう。 SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。

jordan232011
質問者

お礼

丁寧に本当にありがとうございます。両方とも試します。

jordan232011
質問者

補足

●●● 確認!! ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ありがとうございます。エクセルで日付-日付でみると、1日多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136 ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8508/19344)
回答No.1

集計クエリにして ・ID グループ化 ・直近利用日 利用日の最大値 ・利用回数・・・同一ID行数で判断 利用回数の最大値 ・利用金額・・・累積額 利用金額の合計 ・経過日数・・・yyyymmdd - 直近利用日 「yyyymmdd - 直近利用日」の式の結果の最小値 にすれば良いだけです。

jordan232011
質問者

お礼

ありがとうございます。SQLよりこちらの方がおすすめですか。

関連するQ&A

  • ACCESSクエリーについて(条件抽出等)

    以下のACCCESSテーブルデータがあります。 ID     利用日 利用回数 利用金額 c0096 2013/10/02 1  2000 c0096 2013/10/04 2  3000 c0096 2013/10/11 3  4000 c0096 2013/11/11 4  2200 c0096 2013/11/22 5  1000 c0096 2013/12/02 6 4000 c0135 2013/12/03 1 2100 c0135 2013/12/07 2 4100 これをIDがかぶっているものについては1行とし、 かつ以下、 ・直近利用日 ・利用回数・・・同一ID行数で判断 ・利用金額・・・累積額 ・経過日数・・・直近利用日 - 一番古い利用日 の条件でクエリー抽出したいのですが、可能でしょうか。 (SQL使用を希望) ※難しければ経過日数の箇所はなくても構わないです。 イメージ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ID 直近利用日 利用回数 利用金額  経過日数 c0096 2013/12/02 6 16200    61 c0135 2013/12/07 2 6200 4

  • ACCESSクエリーについて(条件抽出等3差分)

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136

  • ACCESSクエリーについて(条件抽出等3)

    http://okwave.jp/qa/q8769213.html について、 SELECT ID, Max(Q1.利用日) AS 利用日, Max(Q1.利用回数) AS 利用回数, Sum(Q1.利用金額) AS 利用金額, Max(Q1.利用日)-Min(Q1.利用日) AS 経過日数 FROM RFMデータソース AS Q1 GROUP BY ID; 上記で得られる以外の列もテーブルであった場合、それを表示させることはできますでしょうか。 (デザインビューで追加すると、重複行ができてしまう) お手数をおかけしますmm

  • ACCESSとxls.で相違する差分結果が出る

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136 No.1 回答者:bin-chan回答日時:2014/09/26 22:11 > エクセルの方が1多いのですが、エクセルが誤りでしょうか。 いいえ。「関数の仕様が異なる」です。fの数も違うし。 参考URL:http://www.office-kitami.com/lesson/afunction/datediff.html ↑↑↑↑↑ 原因はわかったのですが、xls.と同じ定義にはできないのでしょうか。 他の方は、このような場合、どのように対処されているのでしょうか。。。

  • ACCESSとEXLの算出で差分が出る

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136 No.1 回答者:bin-chan回答日時:2014/09/26 22:11 > エクセルの方が1多いのですが、エクセルが誤りでしょうか。 いいえ。「関数の仕様が異なる」です。fの数も違うし。 参考URL:http://www.office-kitami.com/lesson/afunction/da … ↑↑↑↑↑ 原因はわかったのですが、xls.と同じ定義にはできないのでしょうか。 他の方は、このような場合、どのように対処されているのでしょうか。。。 現在のSQL構文に、参考URLにある、 IIf(Format(Date(),"mmdd")<Format([経過日数],"mmdd"),DateDiff("yyyy",[経過日数],Date())-1,DateDiff("yyyy",[経過日数],Date())) の要素を組み込むことはできないのでしょうか。それとも新たに別列で組み込まなければならないでしょうか。

  • ACCESS2007 クエリの抽出条件について教えてください

    ACCESS2007で、ルックアップ列(コンボボックス)を使用したテーブルがあります。そのテーブルをクエリにて、コンボボックスの条件別に抽出させたいのですが、その抽出条件を教えていただけませんでしょうか。 コンボボックスリストの中身(A,B,C)       A→Aのみ抽出したクエリ       B→Bのみ抽出したクエリ       C→Cのみ抽出したクエリ という風に作成したいのですが。 お忙しいところ申し訳ありません。よろしくお願いします。

  • アクセス2003 クエリの書式

    いつもお世話になっています。 商品テーブルや仕入テーブルなど数種類を作り、それを基にクエリをいくつか作りました。 テーブル[仕入記録]から各商品の直近仕入額を抽出したクエリ[直近仕入額クエリ]とテーブル[商品マスター]を組み合わせ、仕入れのない商品(仕入記録に入力がない商品)はNz関数で0になるようにしました。 そうしたところ商品名や金額はあっているのに、直近仕入額の書式が文字列のような表示になってしまいました。 もちろん[直近仕入額]やその他のテーブルで金額のフィールドは全て書式を通貨にしています。 Nz関数の使い方がおかしいのでしょうか? それとも他に原因があるんでしょうか? よろしくお願いします。

  • Accessクエリでのグループ化

    Accessクエリでのグループ化 以下の2つのテーブルが有ります。 ■社員テーブル ID 名前 1 Aさん 2 Bさん 3 Cさん 4 Dさん 5 Eさん ■受付テーブル ID 受付内容 受付日   社員ID 1  xxxxx 2010/3/1   1 2 xxxxx 2010/3/20   3 3 xxxxx 2010/4/10   2 4 xxxxx   2010/4/11  5 5 xxxxx 2010/4/15  1 6 xxxxx 2010/4/30  2 7 xxxxx 2010/5/3  4 そこで社員毎の受付数をカウントしたいと思っています。 ※受付日が2010/4/1以上5/1未満 名前 受付回数 Aさん 1 Bさん 2 Cさん 0 Dさん 0 Eさん 1 となるイメージです。 しかし、実際にクエリを作ると結果が 名前 受付回数 Aさん 1 Bさん 2 Eさん 1 と、なってしまいます。。 名前:グループ化 受付テーブルのID:カウント 受付日:>=2010/04/01 and <2010/05/01 ※社員テーブルの『ID』と、受付テーブルの『社員ID』を  紐つけており、結合プロパティでは『社員テーブルの  全レコードと受付テーブルの同じ結合フィールドのレコード  だけを含める』としております。 あらかじめ、受付テーブルで受付期間の条件でクエリ を作成しておき、それと社員テーブルを紐つけた場合は イメージ通りの結果になるのですが、1つのクエリで 上記イメージでの結果を表示したいと思ってます。 可能でしょうか? ご教授願います。

  • Accessクエリにて

    お世話になります。 下記テーブルがあります。 ■型番テーブル ID 型番 数量 1  A   1 2  B   1 3  C   1 4  D   1 5  E   1 ■発売日テーブル ID 型番 発売日    削除 1  A   2010/01/01 False 2  B   2010/05/01 False 3  C   2011/03/01 False 4  D   2011/05/01 True 5  E   2011/06/01 False ■上記テーブルを用いたクエリ ・型番テーブルの「型番」と発売日テーブルの「型番」を  紐付ける ・表示したいフィールドは「型番」「発売日」。 ・表示したいのは型番テーブル全件(5レコード)。 ・発売日テーブルの削除がTrueの場合、発売日を空白とする。 *************** ここで質問です。 型番テーブルの全件を表示したいところですが、条件として発売日テーブルの 削除がFalseである為、型番Dが表示されません。 発売日テーブルであらかじめ削除がFalseのみでクエリを作成し、そのクエリと 型番テーブルの「型番」で紐付ければ全件表示されることは分かっており ますが、1つのクエリで表示する方法をご教授頂ければと思います。 宜しくお願い致します。

  • Accessのクエリでの抽出条件

    OS:WindowsXP ACCESS2003 すみません、営業記録を作成していて行き詰っています。どちら様かお教え頂けませんでしょうか? テーブル2つ、[会社]と「営業記録]で[会社_会社ID]と[営業記録_会社ID]を1対多ノリレーションで結んでいます。 これらを元にしたクエリでフィールドに[訪問日]があり、この[訪問日]の最後の訪問日から30日以上経過した会社名のみ抽出して、フォームにデータビューで表示し顧客管理をしたいと希望しています。 クエリの抽出条件に「今日から30日前に一度も訪問記録の無い」さらに「最終訪問日の値を取得する」条件とはどう書けば良いでしょうか? 初心者ですのでブローシャーは書けないんです。すみません。 訪問日の記録は何回かありますのでフォームのデータビューにした場合、色々試してやった結果、現況では、一つの会社に訪問した数回の訪問日が複数表示されています。これを最後の日のみ一回表示したいのです。 ちょっと説明不足かもしれませんが、ご理解のうえ、どうぞよろしくお願いします。

専門家に質問してみよう