再 ACCESSのソートについて(必要なものだけ)

このQ&Aのポイント
  • 再 ACCESSのソートについて質問です。テーブルにあるデータを特定の条件でソートしたいです。
  • 会員番号をユニークIDとして、テーブルにあるデータをソートしたいです。
  • 会員番号が同一の場合は、購入回数が最大の行のみを表示させたいです。
回答を見る
  • ベストアンサー

再 ACCESSのソートについて(必要なものだけ

テーブルにあるデータを以下のようにクエリーでソートしたく。 会員番号をユニークIDとする ○テーブルにあるデータ 注文日      会員番号  購入額   購入回数 2014/03/05   12345678   3675     10 2014/03/05   12345678   3675      9 2014/03/05   98765241   3675      3 上記について会員番号が同一であれば、購入回数が 最大のものだけを行表示させる(以下)ことは 可能でしょうか。 注文日      会員番号    購入額   購入回数 2014/03/05   12345678 3675    10 2014/03/05   98765241 3675     3 会員番号が重複している行は購入回数が最大の数の行だけ残したい。 (重複ありなし混在で1万ほどレコードがある) お手数をおかけします!

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

> ○テーブルにあるデータ テーブルにあるんですよね テーブル名を ★★ と仮定します クエリの SQLビューに以下を記述して表示を確かめてみます SELECT * FROM ★★ AS Q1 WHERE 購入回数= (SELECT Max(購入回数) FROM ★★ WHERE 会員番号=Q1.会員番号); これは、更新/追加等できますが、表示するだけで良ければ SELECT Q1.* FROM ★★ AS Q1 INNER JOIN (SELECT 会員番号, Max(購入回数) AS 回数 FROM ★★ GROUP BY 会員番号) AS Q2 ON Q1.会員番号=Q2.会員番号 AND Q1.購入回数=Q2.回数; ※ どちらが速いのかは、やってみてください

mcdone
質問者

お礼

30246kikuさん 以下、検証したのですが、 SELECT * FROM ★★ AS Q1 WHERE 購入回数= (SELECT Max(購入回数) FROM ★★ WHERE 会員番号=Q1.会員番号); クエリーを実行した際に、 パラメーターで購入回数を要求されます。 >>これを表示させない方法でできないのでしょうか。 購入回数で絞り込み表示はしたくない。

mcdone
質問者

補足

ありがとうございます。一番理想の解とおもいますが、PC端末が手元にないため週明けに 検証します!

その他の回答 (3)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

> 累積で溜まっていくので、直近の日が一番累積数が多いデー タです。 だったら#2さんので大丈夫

mcdone
質問者

お礼

かしこまりました。返信に感謝します。

mcdone
質問者

補足

以下でクエリーを実行すると、購入回数(パラメーター)が要求されるのですが、 それを表示させない方法はないのでしょうか。 購入回数の絞込みはしない。 以下、30246kikuさんにもヒアリングしているのですが。。 お手数をおかけします。 ↓ 30246kikuさん 以下、検証したのですが、 SELECT * FROM ★★ AS Q1 WHERE 購入回数= (SELECT Max(購入回数) FROM ★★ WHERE 会員番号=Q1.会員番号); クエリーを実行した際に、 パラメーターで購入回数を要求されます。 >>これを表示させない方法でできないのでしょうか。 購入回数で絞り込み表示はしたくない。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

最大の購入回数が複数の注文日に存在したら、どうするんですか?

mcdone
質問者

お礼

重複する日があっても最大累積数を1行で表現したい。

mcdone
質問者

補足

↑その場合は一番新しい日(直近)を採用します。 というか、、累積で溜まっていくので、直近の日が一番累積数が多いデータです。 この観点で直近の日で重複があっても表示は1行にしたい。 (bin-chanさん、難しいですか。これ。)

noname#222886
noname#222886
回答No.1

「会員番号」で昇順ソート指定 「購入回数」で最大指定ではいけませんか。

mcdone
質問者

お礼

単に無駄な行(下)は省くという事であればこれで試します。 ※シンプルですね

mcdone
質問者

補足

ごめんなさい、これはクエリー上でするのでしょうか。 またMAX関数を使うのでしょうか。 細かくてすみませんmm

関連するQ&A

  • 歯抜けとなっている特定の会員だけを特定したい

    注文日 会員番号   商品名     価格    注文番号    購入回数 2014/3/2 123345678    お好み焼き     550  201401123   1 上記行毎の注文データがxlsで1万件(行)あります。 (「購入回数」は日別で注文された累積件数をあらわします。1=初回 2=2回目 最大5迄ふられている) <問題> 同じ会員番号のデータで、購入回数[1]がないにもかかわらず、購入回数2以降~から存在する不要な データが混ざっています。 この購入回数1がないのに、同じ会員番号で購入回数が2~5いずれかをふられている行(会員)だけを ピックアップする方法はないでしょうか。xls上でもアクセスにインポートしてからの 処理でもどちらでもかまわないのですが。 いわゆるこの不要データを削除(クリーニング)したいのです。 お知恵をいただけるとありがたいですmm

  • ACCESSデータは5000以上ある(抽出の件)

    データは5000件以上あるのですが、以下で対応は難しいのではないでしょうか。 ソートでできますでしょうか?↓ http://okwave.jp/qa/q8755953.html ●質問した内容● ACCESSを活用して累計(経過)を表現したい 質問者:jordan232011 投稿日時:2014/09/15 21:38 困ってます ACCESSテーブルに以下情報が格納されています。 注文日    会員番号  商品名  価格 2014/03/23  123456 サンプル  500円 2014/04/23  123456 サンプル  500円 2014/05/23  123456 サンプル  500円 2014/03/21  456789 容器    1000円 2014/04/21  456789 容器    1000円 上記をクエリーを利用して、以下の抽出をする方法は ないでしょうか。 ↓ (1) 会員番号 購入回数 価格 累積価格 123456     1 500 500 123456    2 500 1000 123456   3 500 1500 456789   1 1000 1000 456789   2 1000 2000 (2) 会員番号 購入回数 LTV 123456      1 0 123456    2 30 123456    3 60 456789    1 30 456789   2 60 ※LTV:その回の注文日 - 前の注文日 ※必要であれば先頭にAUTOナンバーをつけることも可能 ※ACCESS2010を利用中 お手数ですが御教授いただけるとたすかります。。

  • ACCESS SQLクエリーの活用について

    以下データ群(テーブル名:table1)があります(会員番号はユニークをあらわします)。 注文日   会員番号  商品名  価格 2014/04/11 123456 パンツ  1000 ←一番古い注文日の行(4/11開始)が先頭 2014/04/20 123456 靴下   3000 2014/05/23 456789 半袖   2000 2014/05/23 456789 靴下   3000 2014/05/29 456789 パンツ  1000 2014/05/30 987654 靴下   3000 2014/06/09 987654 寝巻き  5000 2014/06/15 987654 下駄   4000 そして、 SELECT Q4.注文日, Q4.会員番号, Q4.商品名, Q3.購入回数, Q3.LTV FROM (SELECT Q1.注文日, Q1.会員番号, Count(Q2.会員番号)+1 AS 購入回数, DateDiff('d', Nz(Min(Q2.注文日),Q1.注文日), Q1.注文日) AS LTV FROM (SELECT 会員番号, 注文日 FROM ★★ GROUP BY 会員番号, 注文日) AS Q1 LEFT JOIN (SELECT 会員番号, 注文日 FROM ★★ GROUP BY 会員番号, 注文日) AS Q2 ON Q1.会員番号=Q2.会員番号 AND Q1.注文日>Q2.注文日 GROUP BY Q1.会員番号, Q1.注文日) AS Q3 LEFT JOIN ★★ AS Q4 ON Q3.会員番号=Q4.会員番号 AND Q3.注文日=Q4.注文日 ORDER BY Q4.会員番号, Q4.注文日 ; 達人からアドバイスいただいていた 上記SQLクエリーからの表示は 注文日 会員番号 商品名 購入回数 LTV 2014/04/11 123456 パンツ 1 0 2014/04/20 123456 靴下 2 9 2014/05/23 456789 半袖 1 0 2014/05/23 456789 靴下 1 0 2014/05/29 456789 パンツ 2 6 2014/05/30 987654 靴下 1 0 2014/06/09 987654 寝巻き 2 10 2014/06/15 987654 下駄 3 16 と出ます(GOOD!!!)。 上記に付随して、 このクエリーが参照しているテーブルの他の列(例:氏名、都道府県)もある(集計対象ではない)場合でそれも追加で(列名:氏名、都道府県を)表現するためには、 SELECT Q4.注文日, Q4.会員番号, Q4.商品名, Q3.購入回数, Q3.LTV の構文箇所に2つの列名も手打ちで追加する必要がありますでしょうか。 (テーブル列名すべてを表示する・・といった個別に列名を指定しないで表示する方法はあるのでしょうか<列名が多いときに手間が若干かかる)

  • ●最終系:ACCESSクエリーの件!懇願mm

    ACCESSクエリーで教えていただきたいことございます! 以下に関連しております。大変恐縮です。 ↓ http://okwave.jp/qa/q8756016.html ●したいこと● 累積回数、LTVを導きたいです(自動算出)。 ●何から?● 以下データ群(テーブル名:table1)があります(会員番号はユニークをあらわします)。 注文日   会員番号  商品名  価格 2014/04/11 123456 パンツ  1000 ←一番古い注文日の行(4/11開始)が先頭 2014/04/20 123456 靴下   3000 2014/05/23 456789 半袖   2000 2014/05/23 456789 靴下   3000 2014/05/29 456789 パンツ  1000 2014/05/30 987654 靴下   3000 2014/06/09 987654 寝巻き  5000 2014/06/15 987654 下駄   4000 ●SQLクエリーで導きだしたいこと● 上記データ群を、SQL(クエリー)を使用して、 以下のように表現できないでしょうか。 注文日   会員番号  購入回数  LTV  ※商品名も表示できればそのままつけたい 2014/04/11 123456      1     0 2014/04/20 123456   2 9 2014/05/23 456789     1     0 2014/05/23 456789   1 0 2014/05/29 456789   2 6 2014/05/30 987654      1 0 2014/06/09 987654   2 10 2014/06/15 987654     3 16 ※同じ注文日、同じ会員番号であれば、商品を複数購入しようが(複数行であっても)それは同日扱いにより購入回数は同じと数とする ※LTV:その回の注文日 - 最初(1回目)の注文日(最初の購入から見て何日経過か) ※ユニーク(会員番号)の方が、一度にいくつ購入したかは問わず、 何日おき(すべて初回を起点にした経過日とする)に来店したか、頻度と合わせて表現したい ※積み上がる累積金額の表示はなくてかまわないので、上記(購入回数、LTV)2つを表示できないでしょうか。 お知恵をいただければ幸いですmm LTV算出は以下のイメージが近いです。 ↓↓↓↓↓↓↓↓↓↓↓ http://okwave.jp/qa/q8756016.html なお、LTV を求める記述の Max(Q2.注文日) を Min(Q2.注文日) とすると 表示結果は、 会員番号  購入回数  LTV 123456  1  0 123456  2  31 123456  3  61 456789  1  0 456789  2  31

  • ACCESSを活用して累計(経過)を表現したい

    ACCESSテーブルに以下情報が格納されています。 注文日    会員番号  商品名  価格 2014/03/23  123456 サンプル  500円 2014/04/23  123456 サンプル  500円 2014/05/23  123456 サンプル  500円 2014/03/21  456789 容器    1000円 2014/04/21  456789 容器    1000円 上記をクエリーを利用して、以下の抽出をする方法は ないでしょうか。 ↓ (1) 会員番号 購入回数 価格 累積価格 123456     1 500 500 123456    2 500 1000 123456   3 500 1500 456789   1 1000 1000 456789   2 1000 2000 (2) 会員番号 購入回数 LTV 123456      1 0 123456    2 30 123456    3 60 456789    1 30 456789   2 60 ※LTV:その回の注文日 - 前の注文日 ※必要であれば先頭にAUTOナンバーをつけることも可能 ※ACCESS2010を利用中 お手数ですが御教授いただけるとたすかります。。

  • 重複項目を取り除くか、上手いソートがしたいです。。。

    こんにちは。よろしくお願いします。 現在、SQLServer2000のDBを使ってシステムを作っていますが、SQL文で詰まっています。 以下の条件で、どうすればよいのかご教授願えませんでしょうか? テーブル1 番号|授業名|  1| 数学|  2| 国語|  3| 社会|  4| 理科| テーブル2 番号|授業番号|授業日|開始時間|  1|   1| 2/22|  10:00|  2|   2| 2/22|  9:00|  3|   2| 2/22|  16:00|  4|   3| 2/23|  10:00|  5|   4| 2/23|  8:00|  6|   1| 2/23|  13:00|  7|   2| 2/23|  9:00|  8|   3| 2/23|  18:00| テーブル1の番号=テーブル2の授業番号。です。 上のようなテーブルから「それぞれの授業の中から、一番早く開始される順」に並び替えて1件だけ表示させたいのですがどうすればよいのでしょうか? 結果としては 番号|授業名|授業日|開始時間|  1| 国語| 2/22|  9:00|  2| 数学| 2/22|  10:00|  3| 理科| 2/23|  8:00|  4| 社会| 2/23|  10:00| としたいのですが、 Select テーブル1.授業名,Min(テーブル2.授業日) as 授業日,テーブル2.開始時間 from テーブル1 inner join テーブル2 on テーブル1.番号 = テーブル2.授業番号 group by テーブル1.授業名,テーブル2.授業日,テーブル2.開始時間 order by 授業日 とすると、開始時間でソートはかかりませんし、orderbyに入れるとgroupbyの関係で、全件出てきてしまい… 何かよい方法は無いでしょうか? 理想としては、Distinctは列の重複なので、項目の重複ができるような文があったり 何とかして開始時間でソートがかけられれば嬉しいのですが… どなたがご教授願えませんでしょうか。 よろしくお願いします。

  • アクセス2002のクエリで・・・

    急いでいまして、下記の点についてアドバイスいただけると幸いです。 テーブルが以下のようになっていまして 【得意先番号】【年度】【支払日】【請求額】 (行1)【111111111】 【H14】【 6/16 】【7,000】 (行2)【111111111】 【H14】【 7/16 】【4,000】 この得意先番号は一人に対し一義的に決まる番号で、行ごとに一回の請求額がテーブルに記録されています。 このテーブルから、いつの支払日にいくらかったのかという条件で得意先番号を抽出することは可能でしょうか? 具体的にいいますと、うまく説明できないのですが、請求額が何月何日にいくら足りないというのは把握できているのですが、それが誰なのかが把握できていない状況で、何月何日いくら、何月何日にいくらという感じで過去10回ぐらいの履歴で購入者を特定したいというのが今回書き込んだ目的です。 アドバイスいただけると幸いです。

  • ピボットテーブルを複数項目でソートしたい

    ピボットテーブルに展開したデータを、表示している複数の行項目 によりソートすることは可能でしょうか? 行項目として以下が設定されており、  1.科目  2.仕入先  3.購入種類 列項目としては  4.仕入月 データとしては  5.仕入金額 並べ替え変えたい順序としては、 科目毎の年間仕入金額が多い順の購入種類昇順としたいので、 以下のように設定したいのですが、 ピボットテーブル フィールド詳細オプションでは 1項目しかソート順に指定することができません。  1.科目昇順⇒5.合計/仕入金額降順⇒3.購入種類昇順 上記のようなソートを行う方法はありますでしょうか?

  • 配列のソートについて

    配列をソートした時、もともとデータのあった配列番号を記憶しておきたいのですが いい方法はないでしょうか (31,55,84,20,96,14); //1 2 3 4 5 6 ↓ (14,20,31,55,84,96) //6 4 1 2 3 5    ※ソート前の配列番号 いくつかの行(配列A)の、違う列にあるデータを抜き出して配列Bにまとめた後、配列Bをソート その後、配列Bのもともとの順番の位置の行にあるデータを上からコピーしていく感じで行ごとのソートを考えています イメージはこんな感じです a[0]=[1,512,200]; a[1]=[3,100,1]; a[2]=[4,100,265]; a[3]=[8,300,1]; //ソート対象を抜き出す b[0]=a[0][1]; b[1]=a[1][2]; b[2]=a[2][0]; b[3]=a[3][1]; b.sort(); c[0]=a[b[0]のソート前の配列番号]; c[1]=a[b[1]のソート前の配列番号]; c[2]=a[b[2]のソート前の配列番号]; c[3]=a[b[3]のソート前の配列番号];

  • ACCESSを使って重複しているデータを省きたい

    xlsデータをACCESSにインポートしています。 理由は、同じデータ(行)が混在しているシートを整理したいからです。 <各項目名> 整理番号 契約日 注文時間 商品コード 品名 という項目なのですが、5000件中、1000件近くのたぶりがあります。 このダブリについて、「整理番号、契約日、品名」が同じであれば、先頭データだけを 表示するというやり方でかぶらないデータだけを抜き出すことはできないでしょうか。 (そもそも重複しているデータがあることも問題なのですが、相対先が どじっており、こちらでフォローしたい) mm クエリで対応したいのですがいい方法ありますでしょうか。

専門家に質問してみよう