• ベストアンサー

SQL文をご教授願います

SQL文をご教授願います。 以下のようなテーブルを仮定しています。 A   B    C   D ---------------------- 10  100  1203 A 10  200  1204 B <--- 取得したい 11  300  1203 C 11  300  1204 D <--- 12  400  1206 D 12  500  1207 E <--- ・ ・ A列をー意にして、A列・D列のデータを取得したい 条件 Bの大きい方を取得する Bの値が同じ場合はCの大きい方を取得する。 (A列には同じデータが2以上あるとします) (C列には同じデータはありません) 欲しい結果 A   D -------- 10 B 11 D 12 E

  • SQL
  • お礼率55% (10/18)

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

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

RDBに何を使われているか書いてないので、”それなりに動きそうなSQL”しか 書けませんが・・・ select A,B from ほにゃらら as X where not exists ( select 1 from ほにゃらら as Y where (X.A=Y.A and X.B<Y.B) or (X.A=Y.A and X.B=Y.B and X.C<Y.C) ) とかですかね。(未検証です)

SQL
質問者

お礼

期待した結果を出すことができました。

その他の回答 (3)

  • yeslets
  • ベストアンサー率31% (47/151)
回答No.3

GROUP BYを使った時はGROUPにした列と集計関数しか使えないので 単純に考えると 第一段階  AをGROUPにしてBの最大(MB)を求める 第二段階  AとMBをGROUPにしてCの最大(MC)を求める 第三段階  A・MB・MCがそれぞれA・B・Cである行を求める となるような気がします。 CREATE VIEW FIRST AS SELECT A,MAX(B) AS MB FROM TABLE GROUP BY A CREATE VIEW SECOND AS SELECT TABLE.A, MB ,MAX(TABLE.C) AS MC FROM TABLE,FIRST WHERE TABLE.A = FIRST.A AND TABLE.B = MB SELECT TABLE.A,TABLE.D FROM TABLE,SECOND WHERE TABLE.A = SECOND.A AND TABLE.B = MB AND TABLE.C = MC 私はこんなふうに考えてしまいます。

SQL
質問者

お礼

参考にさせていただきました。

  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

元のテーブル名を「T_DATA」と勝手に決めましたが、 以下のSQLで目的のデータが取れました。 SELECT T_DATA.A, T_DATA.D FROM T_DATA INNER JOIN (SELECT A AS MAX_A, MAX(B) AS MAX_B, MAX(C) AS MAX_C FROM T_DATA GROUP BY A) AS T_MAX ON T_DATA.A = T_MAX.MAX_A AND T_DATA.B = T_MAX.MAX_B AND T_DATA.C = T_MAX.MAX_C 「同一のAの中で、Bが大きいか、Bが同じならCが大きいもの」を まず先に探しています(カッコ内のサブクエリ)。 本当ならここでそのときのDの値もほしいところですが、 GROUP BYを使ったときは、そのGROUP BYを行った項目か、 それ以外の項目なら集合関数をかませなければならないので この時点でDを取得することはできません。 そこでそれをサブクエリにし、元のテーブルと結合させて AとBとCの値を条件にしてDを取っています。

SQL
質問者

お礼

参考にさせていただきました。

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.1

select A, MAX(B),MAX(C),D from テーブル名 group by A で良いかと思います。

関連するQ&A

  • SQL文を教えてください

    SQLを教えてください。 以下のようなテーブルを仮定しています。 A  B  C -------------- 10 12 1201 11 12 1203 11 13 1205 12 12 1206 A列をー意にして、A列とB列の全データを取得 したいのですが、2・3行目のような場合は C列の大きい方を取得したいのですが・・・ 欲しい結果 A  B C -------------- 10 12 1201 11 13 1205 <--- 12 12 1206

  • SQL文での条件分岐

    列a,b,cから構成されるテーブルAが存在します。 これをテーブルB(列d,e)に以下の流れでコピーしたいのです。 ・a列の値 → d列 にコピー ・aの値が"1"ならば、b列の値 → e列 にコピー / "1"以外は、c列の値 → e列 にコピー としたいのですが、これをSQL文だけで書けますか? ストアドを書くのであれば、どのような感じで書けばいいのでしょうか? ヒントだけでも結構ですので、分かる方はお教えいただけますか?

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • SQL(SELECT文)を教えてください

    SQL Serverを勉強中です。 以下のようなテーブルに、同一の日付に複数の名称・値のセットが存在します。 Date(日付)  Name(名称) Value(値) 20130101      a      10 20130101      b      20 20130101      c      30 20130202      a      5 20130202      b      10 20130202      c      15 このデータを、SQLのSELECT文で取得し、以下のような表を作りたいと考えています。 a b c 20130101 10 20 30 20130202 5 10 15 行が日付、列が名称になっています。 このように取得できるSQL文を教えてください。よろしくお願いします。

  • SQL文を教えてください

    A B C --------- 11 22 33 44 55 33 上記のように、同じ値を持つレコードが2件以上あるC列の値を取得するにはどのようなSQL文にすればよいでしょうか。 よろしくお願いします。

  • 条件文を使ったグループ出力SQL文

    SQL初心者です。な~んだこんな事くらいと言わず教えてください。 テーブルに A B C ------------ 5 a b 7 c d 4 a d 5 f b ------------ というデータがあります。 これを Bの列については、aとa以外 Cの列については、bとb以外 というようにグルーピングして、合計値を出したいと思っています。 結果として a b 5 a b以外 4 a以外 b 5 a以外 b以外 7 という形の出力イメージです。 調べてみてcase when文を使えばいいなんてことをなんとなく理解しているのですが、group byと組み合わせてどのようにSQL文を書けばいいかわかりません。 SQL Serverを使っています。ご存知の方、ご教授ください。

  • SQL文について

    Select文についての質問です。 テーブルA,B, Cがります。  Aテーブルのカラム A1,A2, A3  Bテーブルのカラム B1, B2, B3  Cテーブルのカラム C1,C2, C3 A1=B1,A2=B2の  A3,B3 と、 A1=C1でC3がNULLでないCテーブルの件数 を一度に取得したい場合、どのようなSQL文になるでしょうか。 よろしくお願いします。

  • SQL文 教えて下さい。

    以下のようなデータがあります。 ・列Aにはが1~300までの値が格納。 ・列BにはA~Zまでの値が格納。 列B、A~Zの値に対して、 列Aの値は列1~300の値を複数持つことができます。 列A 列B ----------- 1 A 2 A 3 A 6 A 1 B 3 B  : このとき、列Aの値のうち、1~10までの値を全て持つ列Bの値を抜き出すにはどういったSQL文を記述すればよいでしょうか。 よろしくお願いします。

  • SQLの書き方について教えてください。

    SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています

  • SQL文がわかりません。

    SQL文がわからなく困っております。 下記のデータ*01を*02のデータのようにSELECTするためには、 どのようなSQL文を書けばよいのかお教えいただけますでしょうか? DBはoracle11gです。 ※01 ID      所属部署 _____________________________    1     a    1     b     2     a    2     b    2     c    3     a    3     b    3     c    3     d ____________________________ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ※02  ID   所属部署    所属部署2   所属部署3   所属部署4 _________________________________________   1         a         b 2         a         b         c 3         a         b         c         d