• ベストアンサー

あるフィールドの最大値を条件にデータを抽出する方法

Tirelo-Setshabaの回答

  • ベストアンサー
回答No.3

クエリーを使えば比較的楽に出来るでしょうがひとつのSQLでやるのは少々難しいように思います。 そこで、SQLを二回に分けて結果を出してはどうでしょうか。 最初に学籍番号と点数だけで「SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;」とし、個人別の最高点を抽出します。 そして、それをもとに「SELECT * FROM 成績テーブル WHERE 学籍番号 = 最高点のSQLの学籍番号 AND 点数 = 最高点のSQLの最高点;」とし、必要なほかの情報(氏名、性別、科目)を持ってきます。 【例】 Dim db As database Dim rs1 As recordset Dim rs2 As recordset Set db=CurrentDb Set rs1=db.OpenRecordset("SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;",dbOpenDynaset) rs1.MoveFirst Set rs2=db.OpenRecordset("SELECT * FROM 成績テーブル WHERE 学籍番号 = '" & rs1("学籍番号") & "' AND 点数 = " & rs1("最高点") & ";",dbOpenDynaset) rs2.MoveFirst 後はrs2("学籍番号")、rs2("氏名")等の必要な情報を必要に応じて操作すれば よろしいのではないでしょうか。

seyatomo
質問者

お礼

2つのレコードセットを使って操作する方法があったのですね。 早速試してみようと思います。ありがとうございました。

関連するQ&A

  • クエリで複数条件を同時に抽出・出力する方法

    お世話になります。 ACCESSのクエリであるテーブルの入力ミスを抽出したいと考えています。 例えば、氏名と科目と点数があるとします。 No.  氏名  科目  点数 -------------------------- 01 佐藤  国語   80 02 田中  国語   45 03 鈴木  国語   60 04 佐藤  数学   75 05 田中  数学   40 06 鈴木  数学   48 ここで抽出したい条件として、国語は59点以下、数学は49点以下の抽出をしたいとして、今まではクエリの条件に1つずつ科目と点数に条件を入れ1つずつ結果を抽出をしていましたが、同時に結果を得ることができますか?また、結果をリスト表(クエリかレポート)として出力できますか? 拙い文で申し訳ありませんが、分かる方いらっしゃいましたらよろしくお願いいたします。 (スキルとして少しで、ブランクもありますがVBA,SQLです)

  • 同じフィールドから複数条件のAND条件で抽出する方法

    お世話になります。 同じフィールドから複数条件のAND条件で抽出する方法 DBはAccessです。 フィールド1がA フィールド2がBという条件でしたら Select 抽出フィールド form テーブル where フィールド1=A and フィールド2=B で行っています。 フィールド1がAまたはBでしたら Select 抽出フィールド form テーブル where フィールド1=A or フィールド1=B で行っています。 それではフィールド1がAもBも満たす抽出はどのようにしたら良いのでしょうか。 例: 学生テーブル  フィールド 学生ID、氏名 履修科目テーブル  フィールド 学生ID、同一学生内連番、科目 というテーブル構成で英語、国語のどちらも履修している学生を抽出する場合などです。 2テーブルをリンクしたクエリを作ったのですが、 単にフィールド 学生ID、氏名、同一学生内連番、科目 なのでどちらも履修している学生を抽出できませんでした。 どのようにしたらよろしいのでしょうか。よろしくお願いいたします。

  • Accessのクエリで2つのフィールドが同条件の場合に結合したい

    Accessのクエリで2つのフィールドが同条件の場合に結合したい 以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。 【テーブル名:勤怠データ】 氏名│日付│出勤時刻 ────────────────── 鈴木│2/1│8:01 鈴木│2/2│8:02 鈴木│2/3│8:03 高橋│2/1│9:01 高橋│2/2│9:02 高橋│2/3│9:03 【テーブル名:シフト】 氏名│日付│シフト ────────────────── 鈴木│2/1│A 鈴木│2/2│B 鈴木│2/3│A 高橋│2/1│B 高橋│2/2│C 高橋│2/3│B 【クエリ:シフト勤怠データ】←作りたいもの 氏名│日付│シフト│出勤時刻 ────────────────── 鈴木│2/1│A│8:01 鈴木│2/2│B│8:02 鈴木│2/3│A│8:03 高橋│2/1│B│9:01 高橋│2/2│C│9:02 高橋│2/3│B│9:03 氏名と日付のフィールドが一致するときに結合させたいのですが、 デザイン画面でつなげればいいのかわかりません。 ご回答よろしくお願い致します。

  • Access 複数フィールドにまたがる抽出条件

    Access2016で、クエリの抽出条件の設定に悩んでいます。解決策をご存知の方はご教示いただきますようお願い致します。 ★やりたいこと★ 【テーブル1】に以下のようなフィールドがあります。 [フィールドA] "製品a" "製品b" "製品c ..." のようなデータ群 [フィールドB] "00 "01" の2種類のデータ群 [フィールドC] "98" "99" の2種類のデータ群 フィールドBが "00" で、かつフィールドCが "98" に該当するデータのみを除外する抽出条件を設定したい。 ※フィールドBが "00" でフィールドCが "99" のようなデータは除外したくない SQLとかは使わず、初心者でも後から解読・編集できるような方法があればありがたいです。

  • Access 各レコードの中での最大フィールドを抽出したい

    Accessにつぎのようなテーブルがあります(例)。 各人の成績表 フィールド1:名前 フィールド2:1回目の得点 フィールド3:2回目の得点 フィールド4:3回目の得点 名前の重複はありません。 レコードごとに、フィールド2~4の最大値を抽出する方法を教えていただけると、たいへん幸せです。 どうぞ、よろしくお願いします。

  • Access 複数の抽出条件

    Access2002 windows2000 (例)次のようなテーブルとします。 フィールド名:名前 年齢 性別 レコード1 :山本 30 男 レコード2 :鈴木 40 女 レコード3 :田中 45 男 レコード4 :森本 26 女 クエリを利用して抽出する時、年齢が40以上で男を条件とすれば (1)年齢フィールドの抽出条件:>=40 (2)性別フィールドの抽出条件:男 として、田中が抽出されます。 では年齢が40以上で男、そして女は全て抽出したい時は(1)(2)の条件はどの様にすればいいでしょう? 抽出結果が 田中、鈴木、森本となりたいのです。 複数のクエリを作れば出来ますが、1つのクエリでは無理なのでしょうか。

  • キーのフィールドが最大値の他フィールドのデータ抽出

    下記のようなテーブルがあったとします。 ----------------------  (1) | (2) | (3)  ----------------------  A | 3 | あ  A | 1 | い  A | 5 | う  B | 3 | え  B | 2 | お ---------------------- フィールド(1)がグループで、それぞれAグループ、 Bグループとします。 このとき、それぞれのグループ内のフィールド(2)が 最大のレコードのフィールド(3)データを抽出したいのですが、 どのようにすればよいでしょうか? 上記の例で言うと、 ----------------------  (1) | (2) | (3)  ----------------------  A | 5 | う  B | 3 | え ---------------------- という結果を得たいのですが・・・

  • EXCELにて3つの条件を違うシートに抽出したいです。

    エクセルで元データ(sheet1)を3つの条件にあったデータを別シート(sheet2)に抽出し、 なおかつ抽出したデータを元データ(sheet1)から消去する方法はありますか? できれば関数でお願いします。 ☆シート1☆※元データ   A B C D 1 氏名 出身 作業 時間 2 鈴木 愛知 1 1.0 3 渡辺 静岡 2 1.5 4 鈴木 愛知 2 2.0 5 松坂 岐阜 3 0.5 6 鈴木 愛知 3 1.0 7 鈴木 愛知 4 1.5 8 森田 三重 2 0.5 ☆シート2☆ A B C D 1 氏名 出身 作業 時間 2 鈴木 愛知 1 1.0 3 鈴木 愛知 2 2.0 4 鈴木 愛知 3 1.0 5 鈴木 愛知 4 1.5 補足 ・シート2の条件として『氏名』と『出身』が同じでなおかつ『作業』の1,2,3,4がある人のみ。 このとき、『作業』が4がある人のみ抽出したいです。 ・抽出したときにシート1に抽出したデータ(例では鈴木)が消えるようにしたいです。 説明が不十分で伝わりにくいとは思いますが、 よろしくお願いします。

  • VBA で抽出したデータが一定数まできたら、異なるセルに折り返して抽出するように設定したい。

    VBA で抽出したデータが一定数まできたら、異なるセルに折り返して抽出するように設定したいです。 ◇シート1◇ ※元データ  A      B     C     D     1| 氏名 役職 部署 年齢      ―――――――――――――――― 2| 山田 社員 開発 45  3| 田中 社員 人事 42   4| 鈴木 派遣 企画 30   5| 高橋 役員 人事 50 6| 坂野 社員 企画 33   7| 井上 派遣 企画 29 ◇シート2◇  条件1.役職は"役員"で、部署が"人事"の人の   氏名、役職、部署をA3から順に抽出する 条件2.A列のデータが9行目まできたら     D3に抽出されるようにする  A      B     C     D     E    F 1 氏名 役職 部署  氏名 役職 部署 2 高橋 役員 人事   3 4 5 6 7 8 9 ―――――――――――――――――――― ちなみにこのサイトで以下のコードを作成してもらいましたが これだとデータ元の全ての行が抽出されてしまいます。 Private Sub Worksheet_Activate() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:E1").AutoFilter .Range("A1:E1").AutoFilter Field:=2, Criteria1:="役員" .Range("A1:E1").AutoFilter Field:=3, Criteria1:="人事" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A3") .AutoFilterMode = False End With End Sub 条件2のデータを折り返す条件が難しいようであれば 条件1の3列のみ抽出する方法で結構ですので教えてください。 よろしくお願いします。

  • アクセスフィールドの抽出条件について。

    アクセスに取り込んだデータに 連続番号があったとします。 クエリの抽出条件で 連続番号が奇数の場合のレコードを抽出 連続番号が偶数の場合のレコードを抽出というように 奇数偶数の作業列を作らず 抽出条件を一気に判定することは出来ますでしょうか。 一応試したのが作業列を作る方法ですが 例えば50フィールドあるクエリを作成し 連続番号をキーに フィールド mod 2 とすると 奇数偶数の判定が出来 抽出条件は満たすのですが フィールドのmodの判定で 連続番号が上書きされてしまいます。 また http://www.mahoutsukaino.com/ac/ac2000/ac2000/nigyo/gyo02.htmの ようにすると フィールド数が足りなく すべてのフィールドが追加出来なくなります。 どなたかアドバイスよろしくお願いします。