• ベストアンサー

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
  • お礼率55% (10/18)

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

  • ベストアンサー
  • 7marine
  • ベストアンサー率36% (59/160)
回答No.3

まだ完璧じゃなかったね さらに11,15,1205がデータとしてあると A=11は一意にならないのでANo.2のクエリをそっくり A,Cでgroup byすればいいみたい、 その際のBはMax?Min?ご自由に select A,max(B) as B,C from( SELECT A,B,C FROM テーブル as T1 WHERE exists (SELECT * FROM テーブル as T2 GROUP BY A having T1.A=T2.A and T1.C=MAX(T2.C)) ) as T3 group by A,C

SQL
質問者

お礼

参考になりました。

その他の回答 (2)

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.2

SELECT A,B,C FROM テーブル WHERE C IN (SELECT MAX(C) FROM テーブル GROUP BY A) だと A B C 11,14,1201 の行が存在したらそれも引っかかりますよ。 SELECT A,B,C FROM テーブル as T1 WHERE exists (SELECT * FROM テーブル as T2 GROUP BY A having T1.A=T2.A and T1.C=MAX(T2.C)) これでどうですか?

  • dober-o
  • ベストアンサー率59% (260/439)
回答No.1

こんな感じですかね(サブクエリで) SELECT A,B,C FROM テーブル WHERE C IN (SELECT MAX(C) FROM テーブル GROUP BY A)

参考URL:
http://www.techscore.com/tech/sql/07_01.html
SQL
質問者

お礼

参考になりました。

関連するQ&A

  • 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(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文の書き方。初歩的ですみません。

    SQL文苦手で困っています。教えてください。 MSSQLserver8.0使用です。 以下のテーブル。 コードA 区分 コードB 数量 101     A    301    1 101     A    302    2 101     A    303    1 101     B    901    2 101     B    902    1 102     A    301    1 102     B    901    2 を、コードB単位に数量を集計し、区分別に左右に分け 以下のように帳票出力したいのですが。  301 A 2 |(区切り)| 901 B 4  302 A 2 |(区切り)| 902 B 1  303 A 1 group by 区分, コードBといきたいところなんですが。 使用している帳票出力ソフトの関係上、1ページ毎に出力しなければならず、 通常、A区分データが多いため、改ページのタイミングがずれます。 A区分のデータとB区分のデータをそれぞれ別に取得し(2つのSQL)、 2つの結果を交互に1行ずつよむ・・・という方法以外に、 1つのSQL文で、 1行目がA区分(301)、2行目がB区分(901)、3行目がA区分(302)・・ のように交互にデータを取得する方法ってありますか? うまく表現できなくてすみませんが、 よろしくお願いします。 

  • SQL文で

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

  • SQL文を教えてください。

    特定の日付Xを指定した場合、 以下のような結果になるSQL文を教えてください。 よろしくお願いします。 1) 日付X = 2003-12-17 の場合 ID table_A_DATE table_B_DATE table_C_DATE ------------------------------------------------ 001 2003-12-10 2003-12-12 2003-12-14 002 2003-12-15 ---------- 2003-12-16 003 2003-12-06 2003-12-10 ---------- 004 2003-12-08 ---------- ---------- 2) 日付X = 2003-12-11 の場合 ID table_A_DATE table_B_DATE table_C_DATE ------------------------------------------------ 003 2003-12-06 2003-12-10 ---------- 004 2003-12-08 ---------- ---------- table A(テーブルAには全ユーザのデータがあります) ID DATE ------------------ 001 2003-12-10 002 2003-12-15 003 2003-12-06 004 2003-12-08 table B ID DATE ------------------ 001 2003-12-12 003 2003-12-10 table C ID DATE ------------------ 001 2003-12-14 002 2003-12-16

  • こんなSQL文

    Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A   B | C ――――――――   2 | 10   2 | 1   1 | 10   1 | 1   1 | 11   1 | 2   1 | 1   3 | 10   2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。   B | C     B | C ――――――――― ―――――――――   1 | 10    2 | 10   1 | 1     2 | 1   1 | 11    2 | 3   1 | 2   1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

  • SQLの勉強中の者です。

    SQLの勉強中の者です。 調べてもよく分からなかったので、分かる方、ご教授いただけると嬉しいです。 ●DBテーブル情報  A B C ---------------  1 1 1  1 2 1  1 2 2 ●取得条件 「A」=1 かつ「B」=1or2 であり、かつ 「B」=1の取得データと「B」=2の取得データで「C」が共通していること 上記例で言えば、テーブルの1、2行目を取得したいのですが… どんなSQL文を使えば良いのか、ヒントだけでも良いのでいただけないでしょうか。 どうぞ宜しくお願いします。

  • 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の書き方

    以下の条件を取得したいのですがどのようなSQLを組めばいいか悩んでます。 テーブルA(列はC1,C2,C3,C4 PKはC1,C2です。) ■テーブルAのデータ C1  C2   C3   C4 1   1   50   備考1です。 1   2   75   備考2です。 2   1   25   備考3です。 3   1   75   備考4です。 3   2   90   備考5です。 3   3   50   備考6です。 ■取得したい結果 C1  C2   C3   C4 1   2   75   備考2です。 2   1   25   備考3です。 3   2   90   備考5です。 ■取得したい条件 C1でグルーピングしたなかでC3の値が一番大きな行を取得する。 現在は以下のようなSQLを書いています。 SELCT T1.* FROM テーブルA T1, (SELECT C1,MAX(C3) AS C3MAX FROM テーブルA GROUP BY C1) T2 WHERE T1.C1 = T2.C1 AND T1.C3 = T2.C3MAX もう少し簡単なSQLで出来そうですが、うまく思いつきません。 宜しくお願いします。

  • SQLについての質問です

    SQLの質問です。(Oracle) 二つのテーブル T1, T2 に、それぞれ三つのカラム A, B, C があり、A, B の値が同じである行においてT1のCからT2のCへ値をコピーするSQLを教えてほしいです。 以下、そのデータ例です。 テーブル T1 A B C --------- 1 AAA 10 2 BBB 20 3 CCC 30 テーブル T2 A B C --------- 1 AAA 0 2 XXX 0 4 YYY 0 この場合、結果としてテーブル T2は1行目だけがカラム Cの値がT1からコピーされ A B C --------- 1 AAA 10 2 XXX 0 4 YYY 0 としたいです。