• ベストアンサー

最大値を含むレコードの抽出

お世話になります。 SQLでIN句やサブクエリではなく、HAVING句+MAX関数を使用して最大値を含むレコードを抽出することはできるのでしょうか。 id | name | value --------------- 1 | aaaa | 2000 2 | aaaa | 1000 3 | bbbb | 1000 上の表でいうとnameフィールドでグルーピングしてidの1と3が抽出対象になります。MySQLを使用しておりますが、 標準SQLでお願いしたいです。 よろしくどうぞ。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

1と3のid,name,valueを取得するということですよね? 基本的にgroup byするときにselectできる項目はgroup by にある項目か集計関数を使った値のみです。 つまり、select id,name,valueとするには group by id,name,valueとする必要があるわけです。 そう考えると無理でしょう。 なぜ、「サブクエリを使わずに」なのでしょうか?

kanade-goo
質問者

お礼

やはり無理ですよね(^^;) Java Persistence Query Language (JPQL)をコード内で使っています。移植性の観点からJPQLが導入されたもののSQLに戻ってしまいそうな予感が、ということで後の保守性を考えて可能な限りシンプルな文にしたいと思っていました。 質問の件、確証がもてなかったので質問させていただきました。 ありがとうございました。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

多分、無理だと思います。

kanade-goo
質問者

お礼

そう思いつつ質問してしまいました・・・ ご回答ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

質問の意図がよくわからないのですが、サブクエリを使わずにということは テンポラリを一度つくって・・・というトンチではないですよね? SQLを少し学習すればわかりますがnameでgroup by してvalueのmaxを得る場合 そこでたまたまでてくるidはmaxのものであるという保証はありません。 なのでおっしゃることを一本のSQLでおこなうことはできません。 すなおにサブクエリをつかってください。

kanade-goo
質問者

お礼

>idはmaxのものであるという保証はありません。 そうですよね。質問の用件に迫られることが多くて「やり方を知らないだけでできるのではないか?」と思い質問させていただきました。 ありがとうございました。

関連するQ&A