MAX関数を使って日付とナンバーをグループ化し、最大のサブナンバーを取得する方法

このQ&Aのポイント
  • 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 * で引き抜きたいのですが・・。 初心者で申し訳ありません・・。

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

  • ベストアンサー
  • Azzuri
  • ベストアンサー率68% (34/50)
回答No.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 -------------------------------------- といったように取り出すことはできますか? どうぞ宜しくお願い致します。

  • サブクエリーについて教えてください。

    こんにちは!以下のようなことがサブクエリーを使用してできるか?他にどんな方法があるか、アドバイスをお願いします。 あるテーブル(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.で抽出したデータに対してグループ化して集計する これを一回で実行するにはどのようにしたら良いでしょうか?サブクエリーでできそうだと思い、いろいろ調べましたが、よく分かりませんでした。 よろしくお願いします。

  • 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)

  • ポスグレ レコードの比較

    ポスグレ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 よろしくお願いします。

  • 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]      と配列化したいのです。 ご教授宜しくお願いいたします。

  • 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で教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • 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の最新日付を取り出せますか

  • 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を削除するだけでしたらできるのですが、合わせて明細テーブルにも削除処理をかける書き方がわかりません。 どうか、教えてください。よろしくお願いいたします。