- ベストアンサー
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 どうかよろしくお願いいたします
- みんなの回答 (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で動くか分からないもので......。
その他の回答 (1)
- MarrowG
- ベストアンサー率53% (41/76)
SELECT col2, MAX(col1), MAX(col4), col3, FROM tab01 WHERE col2 IN ('国語','算数','理科') GROUP BY col2, MAX(col1), MAX(col4) 出力されるカラムの順番が違いますがこれでお望みの出力が得られると思います。 後は出力側(帳票?)で調節すればよいでしょう。
お礼
舌足らずな説明にも関わらず、ご回答ありがとうございました。
お礼
舌足らずな説明にも関わらず、ご回答ありがとうございました。 参考になりました。 おかげさまで、徹夜が一回 回避できそうです