• ベストアンサー

MAX値を条件にデータを取得するには?

SQL文で困っています。 ご教授下さい。 下記のようなデータがあった場合、それぞれの区分毎に 年月が最大(最新)のデータを取得したいです。 (実際には1レコードにその他項目があり、それらも取得します。) <検索対象データ> 区分 年月   金額 ----------------------------- A   200412  600 A   200503  560 B   200311  600 B   200508  1000 B   200504  560 C   200508  400 C   200301  1100 <取得したいデータ> 区分 年月   金額 ----------------------------- A   200503  560 B   200508  1000 C   200508  400 よろしくお願いします。

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

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが) select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月 order by B.区分

Kafka_F
質問者

お礼

早々のご回答ありがとうございました。 inner joinを使えばよかったんですね。 希望通りのデータを取得することが出来ました!

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • tamzou
  • ベストアンサー率50% (1/2)
回答No.5

すいません、下の#4のSQLに1箇所間違いがありました。 select WK1.区分, WK1.年月,     WK2.金額  from テーブルA WK2,     (select max(年月) as 年月,         区分 as 区分       from テーブルA          ~~~~~~~~~~     group by 区分) WK1 where WK2.区分 = WK1.区分  and WK2.年月 = WK1.年月

Kafka_F
質問者

お礼

ご回答ありがとうございました。 サブクエリーのうまく出来ず、悩んでいましたが 理解できました。 希望通りのデータを取得することが出来ました! 皆様、ありがとうございました。 いくつか方法を教えた頂きましたので、あとは実際に 早く取得できる方を使ってみようと思います。

すると、全ての回答が全文表示されます。
  • tamzou
  • ベストアンサー率50% (1/2)
回答No.4

副問合せを使って以下のようなSQLではいかがでしょうか(^^; select WK1.区分, WK1.年月, WK2.金額 from テーブルA WK2, (select max(年月) as 年月, 区分 as 区分 from テーブルB group by 区分) WK1 where WK2.区分 = WK1.区分 and WK2.年月 = WK1.年月

すると、全ての回答が全文表示されます。
回答No.3

間違えました。 SELECT *,MAX(金額) FROM テーブル名 GROUP BY 区分 これでどうでしょうか?

Kafka_F
質問者

お礼

ご回答ありがとうございました。 でも、これだと「年月が最大(最新)のデータ」と いう条件がつかなかったです。

すると、全ての回答が全文表示されます。
回答No.1

年月をグループ化して、金額の最大値を取得ってところでしょうか? SELECT *,MAX(金額) FROM テーブル名 GROUP BY 年月 これでどうでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A