プロが教える店舗&オフィスのセキュリティ対策術

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

どうかよろしくお願いいたします

A 回答 (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で動くか分からないもので......。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/13 00:27

SELECT col2, MAX(col1), MAX(col4), col3, FROM tab01


WHERE col2 IN ('国語','算数','理科')
GROUP BY col2, MAX(col1), MAX(col4)

出力されるカラムの順番が違いますがこれでお望みの出力が得られると思います。
後は出力側(帳票?)で調節すればよいでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/13 00:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す