- ベストアンサー
【アクセス2010】フィールドの最大値のみ表示
- アクセス2010を使用しています。下記のようなテーブルがあり、クエリを使ってそれぞれの「ID」に紐づいている「区分」の最大値のみを表示させたいです。
- 「年月」を最大で集計すると、年月が入っていないIDが重複して出てきてしましますが、「区分」を最大で集計しても、すべてのデータが表示されます。
- アクセスを触り始めたばかりなので、詳細に(どこを押す、どの欄になにを書く等)教えていただけますととても助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
元になるテーブルのデータにさらなる条件が存在するならば 早めにすべて書いておくほうがいいのですが。一応データは 質問のようなものとして回答しておきます。 一つのクエリにまとめることもできますが、それは最後に表示するとして、 わかりやすく二つのクエリでデータを表示することにします。 まず、質問の主旨は、 「「ID」に紐づいている「区分」の最大値」 を取り出すということですから、質問の テーブルの「ID」と「区分」だけに注目して、 テーブル名は「元テーブル」としておきます。 *********** クエリ「Q1」の作成 ************** (1) クエリのデザインビューで、質問の「元テーブル」を表示。 (2) 「ID」と「区分」だけをフィールドに表示。 (3) 「集計」をクリックすると、デザインビューに「集計」という 項目が表示される。「ID」と「区分」のそれぞれに「グループ化」 と、表示が入る。 (4) 「区分」の「グループ化」と表示されているところを クリックして表示されたリストから「最大」を選択。 フィールド ID 区分の最大:区分 テーブル 元テーブル 元テーブル 集計 グループ化 最大 以上を実行してこのクエリを「Q1」して保存します。 ************ クエリ「Q2」の作成 ************* (1) 新しいクエリをデザインビューで表示し、テーブルの表示で 「元テーブル」とクエリ「Q1」を選択しデザインビューに 表示する。どちらが右でも左でもかまいません。 なお、「Q1」のフィールド名は「ID」と「区分の最大」 となっていると思います。 (2) 表示された「元テーブル」の「ID」をクリックしてそのまま 「Q1」の「ID」にもっていって離すと、「ID」同士で線が 引かれる。これを確認。 (3) 同じように、「元テーブル」の「区分」と「Q1」の「区分の最大」 とを線で結ぶ。 (4) 次に肝心の「年月」を「元テーブル」の「年月」から選択し、 クエリのフィールドに追加する。これで選択された「ID」と 「区分」の条件を満たす「年月」が表示される。 フィールド ID 区分の最大 年月 テーブル Q1 Q1 元テーブル 以上で、出来上がりです。クエリ「Q2」をクリックすると 必要なデータが表示されると思います。なお、 たとえば、 D 区分 年月 10 100 2011/1/1 10 110 2011/3/8 10 150 2015/4/1 10 150 2015/5/3 13 110 13 140 21 140 2016/12/7 21 160 2017/7/7 21 160 のような場合は、 ID 区分の最大 年月 10 150 2015/04/01 13 140 21 160 2017/07/07 10 150 2015/05/01 21 160 のような、結果がクエリで示されます。 つまり、最大値が二つ存在する場合は 何月が違えば両方表示されます。 さらに年月にも最大値を設定してふるいに かけることもできますが、年月が抜けて いるような場合はどうするのか、など面倒な 条件が重なるのであまり深追いをすることは 控えておきます。 なお、これを一つのクエリにすれば、 SELECT Temp.ID, Temp.区分の最大, 元テーブル.年月 FROM 元テーブル INNER JOIN (SELECT 元テーブル.ID, Max(元テーブル.区分) AS 区分の最大 FROM 元テーブル GROUP BY 元テーブル.ID) AS Temp ON (元テーブル.区分 = Temp.区分の最大) AND (元テーブル.ID = Temp.ID); と、なります。新しいクエリでSQLビューに貼り付け、デザインビューで確認してみてください。
お礼
piroin654さん 非常にわかりやすい手順を明示くださりありがとうございました。 クエリを二つに分けることを、初めて勉強しました。 そのあとのSQLコードも、実態に合わせて修正し、自分がほしいとしているデータビューを出すことができました。 このあとフォームのソースにしていきます。 本当にありがとうございました。