- 締切済み
キーのフィールドが最大値の他フィールドのデータ抽出
下記のようなテーブルがあったとします。 ---------------------- (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 | え ---------------------- という結果を得たいのですが・・・
- gaogao30
- お礼率50% (17/34)
- MySQL
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
>どれか適当に1つ抽出です。 2件以上該当するデータがあるのに、その中から1件を抽出するためには、通常は行を一意に定められるキーが必要です。 「どれか適当に一つ抽出」という作業をSQLでやろうとすると、冗長でオーバーヘッドの大きいものになってしまいます。バージョン4.0系以前では、一つのSQLでは困難かも知れません。 それを分かった上で、質問されていませんよね? したがって、列(1)でグループ化した上で、各グループの列(2)の最大値を求めた上で、列(3)の値が複数あり得るなら、どれを取り出すかの工夫が必要になります。 該当する列(3)の値をすべて取り出してよいなら、MySQL 4.0系以前では、一時表を使うといった作業が必要でしょう。 【MySQL 4.0系以前】 create temporary table wt1 as select c1,max(c2) as c2 from t1 group by c1 ; select t1.* from t1,wt1 where t1.c1=wt1.c1 and t1.c2=wt1.c2 order by t1.c1 ; drop temporary table wt1; なお、参考までにMySQL 4.1以降なら、以下のような1SQLで同じ結果を得られます。 【MySQL 4.1~】 select * from t1 where (c1,c2) in( select c1,max(c2) from t1 group by c1 ) ;
- yambejp
- ベストアンサー率51% (3827/7415)
今回はたまたま(2)の最大値は各グループに1つしかありませんが 2つ以上あるときは全て抽出するのでしょうか? それともどれか適当に1つ抽出すればよろしいのでしょうか? それによってダイブ違います。 それとmysqlのバージョンによって書き方がことなるので それも提示した方がよろしいでしょう
補足
ご返答ありがとうございます。 >今回はたまたま(2)の最大値は各グループに1つしかありませんが >2つ以上あるときは全て抽出するのでしょうか? >それともどれか適当に1つ抽出すればよろしいのでしょうか? >それによってダイブ違います。 どれか適当に1つ抽出です。 >それとmysqlのバージョンによって書き方がことなるので >それも提示した方がよろしいでしょう mysqlのバージョンは 4.0.24 です。 誠にお手数ですが、よろしくお願いします。
関連するQ&A
- ACCESS2000でのレコード抽出
OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。
- 締切済み
- その他MS Office製品
- Accessでの抽出について
Accessで下記のようなテーブルがあるとします。 フィールド1 フィールド2 フィールド3 ----------------------- Aさん 20 200 Aさん 10 180 Bさん 10 300 Cさん 10 250 Cさん 30 310 条件1・・・フィールド2が「20」 条件2・・・フィールド3が「200」 この条件が当てはまる、フィールド1のデータはすべて抽出というふうにしたいのですが・・・。 (上記のテーブルでは、1件目と2件目のレコードがあてはまります。) どのようにして抽出したらよいでしょうか?よろしくお願いします。 Access2000を使用します。
- ベストアンサー
- その他(データベース)
- 連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出
図面管理のデータベースをつくっています。 連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出したいのですが どのようにしたらいいのでしょうか? いろいろ調べたのですがなかなかよい結果が出ません。 お知恵をおかしください。よろしくお願いします。 mysqlバージョン:5.0.45 例 テーブル:a(図面管理) a_id(id) a1(図番) a2(種類用紙サイズ) a3(枝番) a4(図面名) a_id a1 a2 a3 a4 1 1 3P 0 aaaa 2 2 3P 0 bbbb 3 2 3P 1 bbbb 4 1 4P 0 cccc 5 1 4P 1 cccc 6 1 4P 1 cccc このテーブルのa1とa2を連結します。(連結フィールド:ren) a_id a1 a2 a3 a4 ren 1 1 3P 0 aaaa 13P 2 2 3P 0 bbbb 23P 3 2 3P 1 bbbb 23P 4 1 4P 0 cccc 14P 5 1 4P 1 cccc 14P 6 1 4P 2 cccc 14P 連結したもの(ren)をグループ化しますこのとき、枝番の値が高いレコードだけ抽出します。 a_id a1 a2 a3 a4 ren 1 1 3P 0 aaaa 13P 3 2 3P 1 bbbb 23P 6 1 4P 2 cccc 14P この最終的な結果を出す方法をお教えください。 おねがいします。
- ベストアンサー
- MySQL
- 「主キー以外重複データ(フィールド多数)」の抽出
タイトルのような抽出方法が必要になり、その出し方で困っています フィールドが100以上ある大きなテーブルが複数(フィールド構造は全く同じ)あり、 そのレコードを一つにまとめる為重複データを抽出し削除したいのです 条件は「主キー以外の全てのフィールドのデータが一致してる重複データ」であり、 それをどうやればAccessの機能で出せるのか悩んでいます。 最初はクエリでグループ化して出そうと思ったのですがこのフィールド数では全て グループ化はできず、 VBAで一行ずつループで処理しようにもキー以外の全フィールド一致とする検索条件のSQLのWHERE式が複雑すぎると出て処理できませんでした フィールド数が多大なテーブルで主キー以外完全一致の重複レコードをうまく抽出するにはどうすればいいのでしょうか?
- ベストアンサー
- Access(アクセス)
- Access2003 複雑な条件のデータ抽出
☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No [A] [B] [C] [D] [E] [F] 1 111 X あ 2 222 X か 3 333 X さ 4 111 Y た 5 222 Y (Null) 6 333 Y は 7 222 Z ま 8 333 Z や 9 111 Z ら =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、 フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、 フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、 フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると 以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No [B] [D] [E] [F] 1 X あ か さ 2 Y た (Null) は 3 Z ら ま や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。 大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- Access 各レコードの中での最大フィールドを抽出したい
Accessにつぎのようなテーブルがあります(例)。 各人の成績表 フィールド1:名前 フィールド2:1回目の得点 フィールド3:2回目の得点 フィールド4:3回目の得点 名前の重複はありません。 レコードごとに、フィールド2~4の最大値を抽出する方法を教えていただけると、たいへん幸せです。 どうぞ、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 別のテーブルのフィールドを抽出項目にするには?
別のテーブルのフィールドを抽出項目にするには? Access初心者です。 申し訳ありませんが、急ぎ回答いただきたく思います。 どうか宜しくお願いいたします。 お伺いしたい内容は、 データが多く、抽出条件も多いので、 別のテーブルのフィールドに入っている単語を使い、 抽出したい元データのレコードをあいまい検索して非表示にしたいです。 データの内容は下記になります。 --------------------------------------- 元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ) フィールド1 フィールド2 ID-1 りんご ID-2 バナナ ・ ・ ・ ・ ・ ・ ID-2000 チェリー --------------------------------------- --------------------------------------- 除外リスト(テーブル3。名前は除外リスト) フィールド1 りんご チェリー ・ ・ ・ --------------------------------------- 元データのフィールド2に Not Like "*りんご*" And Not Like "*チェリー*" と記述すれば、フィールド2にりんご、チェリーを含むレコード以外のものが表示され、 欲しい情報が手に入るのですが、(上記例だとバナナのみ表示される) 実際にはりんご、チェリーなどあいまい検索し、非表示にしたいキーワードが100個あります。 なので、除外リストというテーブルをつくり、 そのフィールド内に書かれたキーワードを使い Not Like "*りんご*" And Not Like "*チェリー*" と同じような表示結果になるようにしたいのですが、 やり方が調べてもどうしてもわかりません。 どうか皆様のお力を貸してください。 宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- あるフィールドの最大値を条件にデータを抽出する方法
Access97のVBAで開発を行っています。SQLでデータの抽出で、あるフィールドの最大値を条件に指定して抽出する方法を教えてください。最大値という曖昧な条件なため、悩んでいます。 (例)ある学校の成績テーブル(左から、学籍番号,組,氏名,性別,科目,点数) 0103,鈴木,男,国語,95 0103,鈴木,男,数学,40 0103,鈴木,男,英語,80 0104,高橋,男,国語,45 0104,高橋,男,数学,85 0104,高橋,男,英語,55 | |(SQLで各人の最高点のデータのみ抽出したい) ↓ (抽出結果) 0103,鈴木,男,国語,95 0104,高橋,男,数学,85 知っている方、是非教えてください。 お願いします。
- ベストアンサー
- その他(データベース)
- ACCESSのフィールドのデータを無重複に抽出する
お世話になります。 ACCESS2000を使用しています初心者です。 あるフィールドに入力されているデータを無重複に抽出したいのですが、簡単で良い方法を教えて下さい。 エクセルでの無重複抽出はできるのですが、データ数が34万件くらいあり、推測される結果は2万件くらいになります。 例) 商品 A B C A B D C 結果 A B C D よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- X個グループからY個ずつデータを抽出したい
例:グループの数は100ぐらいがあって、グループごとのレコード数はそれぞれであり、毎回そのうちのX(例3)グループずつにデータを抽出します。そして1つのグループから最大Y個(例2)のデータを抽出します。 抽出したデータにフラグを立てて、次の抽出時に除外の条件として使います。 例:以下のテーブルがあって、毎回3グループから2個のデータを抽出します: group name flag ---------------------------------------------------------------------------- 1_group 田中A 0 1_group 佐藤A 0 1_group 林A 0 1_group 鈴木A 0 1_group 牧野A 0 2_group 平田B 0 2_group 小林B 0 ・・・ 3_group 高橋C 0 3_group 丹羽C 0 3_group 田中C 0 3_group 佐藤C 0 3_group 鈴木C 0 3_group 吉田C 0 ・・・ 4_group 高橋D 0 4_group 丹羽D 0 4_group 田中D 0 4_group 佐藤D 0 4_group 鈴木D 0 ・・・ (1)1回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 田中A 0 1_group 佐藤A 0 2_group 平田B 0 2_group 小林B 0 3_group 高橋C 0 3_group 丹羽C 0 (2)2回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 林A 0 1_group 鈴木A 0 3_group 田中C 0 3_group 佐藤C 0 4_group 高橋D 0 4_group 丹羽D 0 (3)3回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 牧野A 0 3_group 鈴木C 0 3_group 吉田C 0 4_group 田中D 0 4_group 佐藤D 0 DBはSqlLiteです。 長いですが、ご教授頂ければ、ありがたいです
- ベストアンサー
- その他(データベース)
お礼
ご返答ありがとうございます。 どうやら私には基本的な知識が欠けているようなので もう一度勉強し直します。 お手数をお掛けしてすいません。