2 Replies Latest reply: Dec 2, 2012 7:52 AM by 972990 RSS

    group byについて

    972990
      ID(PK)  A  B  LANK
      ------------------------------
      1      A  A  1    → このレコードを抜き出したい
      2      A  A  2
      3      A  B  2    → このレコードを抜き出したい
      4      A  C  2    → このレコードを抜き出したい
      5      A  C  3

      A、Bをグループ化し、グループ化されたレコードの内LANKが最小の行(列は*で全列表示)を取り出したいのですがやり方がわかりません。
      副問い合わせで長ったらしいSQLを記述しているのですが、もう少し簡単なやり方があればよいなと思っています。
        • 1. Re: group byについて
          tmtsmic
          こんにちは。

          >副問い合わせで長ったらしいSQL
          これだけではあなた以外の人には理解できませんよ。
          長さの基準は人それぞれですからね。

          なので一度、その長いSQLを参考にして自分でSQLを作ってみて
          提示してみてはいかがですか?
          叩き台を提示することって大事です。

          もしかしたら提示したものがベストなSQLかもしれませんし、
          もっと良い記述方法があればアドバイスがもらえるかもしれませんよ。
          多少長い記述でも、データを読むには効率の良い書き方
          なんてこともあるかもしれませんしね。

          OSとOracleのバージョンも書きましょう。
          バージョンによって出来ること出来ないことがありますからね。


          データを作成するスクリプトなんかも提示すれば
          回答をもらえるチャンスが上がると思います。
          CREATE TABLE TEST_TAB
          (
           ID NUMBER(1),
           A VARCHAR2(1),
           B VARCHAR2(1),
           RANK NUMBER(1),
           CONSTRAINT PK_TEST_TAB PRIMARY KEY(ID)
          );
          INSERT INTO TEST_TAB VALUES(1,'A','A',1);
          INSERT INTO TEST_TAB VALUES(2,'A','A',2);
          INSERT INTO TEST_TAB VALUES(3,'A','B',2);
          INSERT INTO TEST_TAB VALUES(4,'A','C',2);
          INSERT INTO TEST_TAB VALUES(5,'A','C',3);
          COMMIT;
          ※LANK→RANKに変えました

          #「どうにかいい感じにならんかなー」って悩みながらSQLを解くことを続けることで
          #だんだんパズルのように楽しくなってきますよ、きっと。
          #私は実際そうでした。(OTN掲示板で過去にいっぱい質問しましたけどね(笑))
          • 2. Re: group byについて
            972990
            ご返信有難うございました。

            質問させていただいたSQLについてですが、分析関数(first_rowとpartitionを使用して)でできそうなのでそちらを使って月曜日に試したいと思います。

            有難うございました。

            ご返信いただいた内容について理解いたしました。
            申し訳ございませんでした。次回から気をつけたいと思います。