- ベストアンサー
sqlの条件文に関して
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 . . .
- みんなの回答 (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 という値があればそれも出力してしまいます。 確認してみてください。
その他の回答 (4)
- 7marine
- ベストアンサー率36% (59/160)
select * from X as X1 where exists ( select a from X group by a having a = X1.a and max(b) = X1.b) こんなのもアリかな?
お礼
ありがとうございます。 いろいろなやり方があるのですね。 勉強になりました。
s_husky です。 ・GROUP BY 節の制限。 ・サブクエリーの制限。 以上の2つの制限を1文にて同時に破るSQL文を教えよ! ということですね! 判りません!
結果として 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がプライマリキーになります。 どうぞよろしくお願い致します。
質問者のテーブルをSQL Server に登録し、 SELECT a,MAX(b) FROM TABLE1 GROUP BY a; のSQL文を使ってデータを抽出すると、 A,9 B,5 C,7 を取得することが出来ました。 質問の主旨と違っていたら、ゴミとして無視して下さい。
補足
レスありがとうございます。 他のフィールドの値も取得したいと考えております。 説明不足ですいません。
お礼
ありがとうございます。 そのまま使わせていただきまして、 無事目的が達成できました。