• ベストアンサー

SQL文について知恵をかしてください!

SQLについて皆さんのお知恵をかしてください 以下の表 tab01から Q01の結果を取り出すSQL文です 検索条件は以下の通り 1) 表tab01から、col1,col2,col3,col4 についてQ01へ出力 2) col2(char型)について "国語","算数","理科"を抽出 3) col4(date型)について「直近」の行のみ抽出    但し、Q01.col2において同じ値が発生する場合は、tab01.col1の値が    最も大きい行を抽出する(例:02,算数と10,算数) この要件を満たすSQL文はどう書けばよいでしょうか? なお、DBはoracle とします tab01 col1 col2 col3 col4  01  国語  80 20011211 02  算数  100 20011208 03  理科  80 20011201 04  国語  90 20011210 05  社会  100 20011209 06  算数  60 20011202 07  体育  80 20011205 08  国語  40 20011207 09  理科  70 20011210 10  算数  100 20011208 Q01 col1 col2 col3 col4 01  国語  80 20011211 10  算数  100 20011208 09  理科  70 20011210 どうかよろしくお願いいたします

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

  • ベストアンサー
  • stork
  • ベストアンサー率34% (97/285)
回答No.2

oracleは使用したことがないんですけど、下のSQLで大丈夫でしょう。 主キーはcol1と仮定しました。 ------------------------------ select tab01.* from tab01,     (select max(col1) MaxCol1     from tab01,         (select col2,max(col4) MaxCol4         from tab01         where col2 in('国語','算数','理科')     group by col2) A     where (tab01.col2=A.col2) and (tab01.col4=A.maxcol4)     group by tab01.col2)B where tab01.col1=B.MaxCol1 -------------------------------- もっとすっきりしたSQLがあるんですどoracleで動くか分からないもので......。

chaff
質問者

お礼

舌足らずな説明にも関わらず、ご回答ありがとうございました。 参考になりました。 おかげさまで、徹夜が一回 回避できそうです

その他の回答 (1)

  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

SELECT col2, MAX(col1), MAX(col4), col3, FROM tab01 WHERE col2 IN ('国語','算数','理科') GROUP BY col2, MAX(col1), MAX(col4) 出力されるカラムの順番が違いますがこれでお望みの出力が得られると思います。 後は出力側(帳票?)で調節すればよいでしょう。

chaff
質問者

お礼

舌足らずな説明にも関わらず、ご回答ありがとうございました。

関連するQ&A