プロが教える店舗&オフィスのセキュリティ対策術

a   b   c   d
------------------------
A   2   be   3
A   9   re   44
A   1   qa   43
B   5   yt   11
C   2   uu   39
C   7   oi   55

このようなテーブルでaが同じだったらbの値が一番大きなものだけを
取得したいのですが、どのようにすればよろしいでしょうか?

select a, b, c, d
from X
.
.
.

A 回答 (5件)

で、できた。



select x.a, x.b, x.c, x.d, x.w
from x, (select a, max(b) b from x group by a) x2
where x.a = x2.a
and x.b = x2.b;

いかがでしょう…。

ただし、bの値が最大のものが複数あればその分出てきます。
つまり
a   b   c   d    W
----------------------------------
C   7   xx   89   20

という値があればそれも出力してしまいます。


確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そのまま使わせていただきまして、
無事目的が達成できました。

お礼日時:2006/01/19 23:58

select * from X as X1 where exists ( select a from X group by a having a = X1.a and max(b) = X1.b)



こんなのもアリかな?
    • good
    • 0
この回答へのお礼

ありがとうございます。
いろいろなやり方があるのですね。
勉強になりました。

お礼日時:2006/01/19 23:59

s_husky です。



・GROUP BY 節の制限。
・サブクエリーの制限。
以上の2つの制限を1文にて同時に破るSQL文を教えよ!
ということですね!
判りません!
    • good
    • 0

結果として



a   b   c   d
------------------------
A   9   re   44
B   5   yt   11
C   7   oi   55

という値が取得したいのですか?
また、プライマリキーとなる項目はないのですか?


よろしくお願いいたします。

この回答への補足

レスありがとうございます。
おっしゃるとおり
a   b   c   d    W
----------------------------------
A   9   re   44   6
B   5   yt   11   3
C   7   oi   55   14

上記のような値を取得したいと考えております。
また、wがプライマリキーになります。
どうぞよろしくお願い致します。

補足日時:2006/01/19 18:15
    • good
    • 0

質問者のテーブルをSQL Server に登録し、



SELECT a,MAX(b) FROM TABLE1 GROUP BY a;

のSQL文を使ってデータを抽出すると、
A,9
B,5
C,7
を取得することが出来ました。
質問の主旨と違っていたら、ゴミとして無視して下さい。

この回答への補足

レスありがとうございます。
他のフィールドの値も取得したいと考えております。
説明不足ですいません。

補足日時:2006/01/19 18:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!