MAX関数を使って日付とナンバーをグループ化し、最大のサブナンバーを取得する方法
- SQLのMAX関数を使って、日付とナンバーをグループ化し、その中で最大のサブナンバーを取得する方法について教えてください。
- 具体的な例として、下記のテーブルでのデータを使って説明します。日付とナンバーをグループ化し、最大のサブナンバーを取り出したい場合、どのようなSQL文を書けばいいでしょうか。
- select * を使って、日付とナンバーをグループ化し、その中で最大のサブナンバーを取得する方法についても教えてください。初心者ですが、よろしくお願いします。
- ベストアンサー
MAXを使って
下記のテーブルで、 日付 ナンバー サブナンバー a 2005/01/01 1 1 b 2005/01/01 1 2 c 2005/01/01 2 1 d 2005/01/01 3 1 e 2005/01/01 1 1 f 2005/01/02 1 2 日付とナンバーをグループ化して、 その中でサブナンバーが一番大きいデータを取りたい。 上記の例だと、b,c,d,fが抽出される予定・・。 何かいい方法ないでしょうか。 ちなみに、カラムを指定して抽出するのではなく、 select * で引き抜きたいのですが・・。 初心者で申し訳ありません・・。
- kacchi55
- お礼率29% (30/101)
- SQL Server
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
SELECT * FROM TEST A INNER JOIN (SELECT 日付,ナンバー,MAX(サブナンバー) AS サブナンバー FROM TEST GROUP BY 日付,ナンバー) B ON A.日付 = B.日付 AND A.ナンバー = B.ナンバー AND A.サブナンバー = B.サブナンバー ですね。
関連するQ&A
- Access、複数のテーブルからデーターを抽出する
Access初心者です。 いくつかのテーブルがあります(日付順に用意されています) そのテーブルから、指定のセル(といっていいのでしょうか) より、データーをクエリとして抽出したいのですが、簡単なやり方はあるのでしょうか? 例として、 テーブル名 [0301]、[0302]、[0303]、[0304]、[0305]、・・・・・・・・。という5つのテーブルがあります。 1つのテーブル内は、このようになっています。 ------------------------------------- A B C D E F G 1 2 3 4 11 22 33 44 55 66 5 ------------------------------------- この5つのテーブルより、「B4」から「F4」までのデーターのみを ------------------------------------- 0301 ・・・・・・・・・・・・・・・・・・・・・・・・ 0302 ・・・・・・・・・・・・・・・・・・・・・・・・ 0303 ・・・・・・・・・・・・・・・・・・・・・・・・ 0304 -------------------------------------- といったように取り出すことはできますか? どうぞ宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- サブクエリーについて教えてください。
こんにちは!以下のようなことがサブクエリーを使用してできるか?他にどんな方法があるか、アドバイスをお願いします。 あるテーブル(TABLE)から2段階でデータをselectし、計算させたいのですが分かりません。 一段階目 select a,b,c,d,e,f from TABLE where a='A' and b='B' 二段階目(上記の結果を使って、ここからが分かりません) select c,d,e,sum(f) as 結果 from TABLE(?) group by c,d,e having e='E' やりたいことの概要: 1. a='A' and b='B'でデータを抽出 2. 1.で抽出したデータに対してグループ化して集計する これを一回で実行するにはどのようにしたら良いでしょうか?サブクエリーでできそうだと思い、いろいろ調べましたが、よく分かりませんでした。 よろしくお願いします。
- ベストアンサー
- SQL Server
- GROUP_CONCAT✕複数列で、違うレコード数
MySQLで、「GROUP_CONCAT」を「複数列」に適用させ、それぞれ異なるレコードを1つにまとめようとしたのですが、 取得出来る結果が、多い方の数に引き連られてしまいます。 ざっくりとした質問でアレなのですが、これは結合の仕方が悪い、 と推測されるでしょうか? そもそも「GROUP_CONCAT」を複数列に適用させる場合、それぞれ異なるレコード数をまとまることはできるのでしょうか?。 ■期待した取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows [テーブルBカラムf] => man ■実際の取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows,windows [テーブルBカラムf] => man,man 「テーブルB」の取得結果が、「テーブルA」取得結果数に引き連られてしまいます ■SQL(抜粋) SELECT GROUP_CONCAT(a.c) AS c, GROUP_CONCAT(a.d) AS d, GROUP_CONCAT(b.e) AS e, GROUP_CONCAT(b.f) AS f FROM hoge h LEFT JOIN テーブルA a ON (h.id = a.hoge_id) LEFT JOIN テーブルB b ON (h.id = b.hoge_id)
- 締切済み
- MySQL
- ポスグレ レコードの比較
ポスグレDBで以下のような二つのテーブルがあって レコード数、カラム等の構造も同じだったとして カラム1の値が二つのテーブルで同じであり カラム2~4のうちどれか一つでも違うレコードを抽出するSQLがわかりません。 下記の例で言うと抽出結果がスキーマA.テーブルAの「←」のレコードを抽出したいです。 スキーマA.テーブルA カラム1|カラム2|カラム3|カラム4| --------------------------- A |aaaaaaa|bbbbbb|ccccccc --------------------------- B |aaaaaaa|bbbbbb|ccccccc ← --------------------------- C |aaaaaaa|bbbbbb|ccccccc ← --------------------------- D |aaaaaaa|bbbbbb|ccccccc ← --------------------------- E |aaaaaaa|bbbbbb|ccccccc スキーマB.テーブルB カラム1|カラム2|カラム3|カラム4| --------------------------- A |aaaaaaa|bbbbbb|ccccccc --------------------------- B |1111111|bbbbbb|ccccccc --------------------------- C |aaaaaaa|777777|ccccccc --------------------------- D |2222222|bbbbbb|8888888 --------------------------- E |aaaaaaa|bbbbbb|ccccccc よろしくお願いします。
- ベストアンサー
- PostgreSQL
- ACCESS テーブル内の特定の文字の置換
お世話になっております。 Access2007+VBAについてになります。 フィールド内の特定の文字を置き換えたいのですが、どのようしたら良いでしょうか。 例えば・・・ テーブル_Aと、テーブルBがあります。 テーブルAには、フィールドCに抽出したいデータのIDが入っています。 テーブルBには、フィールドDに置換えたい日付が入っています。 フィールドDの日付は、『日付は2015-12-22です。』となっており、 フィールドCのIDと、テーブルBにあるフィールドEというIDがマッチしたフィールドDの日付を、『日付は、2015-12-23です。』に置き換えたいと思っています。 IDは、両方ともに、オートナンバー型ではありません。 色々試してみたのですが、全く分かりません。 是非、ご教授をお願い致します。
- ベストアンサー
- オフィス系ソフト
- mysql_fetch_array結果の配列化
【ご質問】 あるselect文を実行し、mysql_fetch_arrayで取得した結果を配列したいのですが、どのようにしたら実現できるでしょうか? 【例】 select文の結果で3レコードヒットした場合、 カラム1 カラム2 カラム3 a b c d e f g h i a⇒カラム1[1]、b⇒カラム2[1]、c⇒カラム3[1] d⇒カラム1[2]、e⇒カラム2[2]、f⇒カラム3[2] g⇒カラム1[3]、h⇒カラム2[3]、i⇒カラム3[3] と配列化したいのです。 ご教授宜しくお願いいたします。
- 締切済み
- MySQL
- 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製品
- SQL について教えて下さい
---------------------------------------- テーブルAの カラム1、カラム2のデータが 10、作業A 20、作業B 30、作業C ---------------------------------------- テーブルBの カラム1、カラム2のデータが 10、2013/1/1 10、2013/2/1 20、1999/1/1 20、1999/2/1 ---------------------------------------- のようなデータがあります テーブルA、テーブルBのカラム1はリレーションです この2のテーブルから、テーブルBの最新日付の カラム1のグループ毎に選択するSQLを教えて下さい ---------------------------------------- 結果 10、作業A、2013/2/1 20、作業B、1999/2/1 ---------------------------------------- select テーブルA.カラム1,テーブルA.カラム2,テーブルB.カラム2 で、条件をどうしたら、テーブルBの最新日付を取り出せますか
- ベストアンサー
- Oracle
- ACCSESSのSQLで教えてください。
すみません! SQL初心者なのですが教えてください。 下記のようなtableというテーブルなのですが こちらのテーブルをデータが増加しても(1)から(2)のように select表示させるにはどうすればよいか教えて頂けないでしょうか・・・。 何卒よろしくお願い致します。 テーブル名:table カラム名:NO,kigou (1) table |NO|kigou| |1 |a | |2 |b | |3 |c | |4 |d | |5 |e | ↓ (2) |NO1|kigou1|NO2|kigou2|NO3|kigou3| |1 |a |2 |b |3 |c | |4 |d |5 |e | ・・・
- ベストアンサー
- その他(データベース)
- 複雑な削除SQLを組んだことがある方いらっしゃいますか?
はじめまして。とても困っています。 以下のような2つのテーブルがあります。 主テーブル No.1 No.2 No.3 削除サイン 更新日付 001 01 01 D 20050102 001 02 01 20050105 001 02 02 D 20050107 明細テーブル No.1 No.2 No.3 事項 更新日付 001 01 01 A 20050102 001 02 01 B 20050105 001 02 02 C 20050107 001 01 01 D 20050102 001 02 01 E 20050105 001 02 02 F 20050107 主テーブルの削除サインがDのデータを削除するとき 合わせて明細テーブルのデータも削除します。 そのときの照合キーが「No.1」「No.2」「No.3」「更新日付」の4つのキーなのです。 主テーブルの削除サインDを削除するだけでしたらできるのですが、合わせて明細テーブルにも削除処理をかける書き方がわかりません。 どうか、教えてください。よろしくお願いいたします。
- ベストアンサー
- Visual Basic