- ベストアンサー
SQL文(クエリ)の教授と検索方法の説明
- Oracle8においてテーブルt_tempに蓄積されるデータを用いて2つの検索を行いたい。1つ目は号機ごとに基板温度が50度以上となった最初の日付と基板温度を検索する方法であり、2つ目は号機ごとに基板温度が最高温度の日付と基板温度を検索する方法である。
- 参考書等を調べても具体的な方法が見つからないため、クエリ例とその説明を教えていただきたい。
- 実行環境はMS-ACCESSからパススルークエリを使用している。追加の情報が必要な場合は指摘してほしい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
t1、t2はエイリアス(別名)です。 fromの後ろでselectしているのでt2というテーブルに見せかけてます。 元テーブルはt_tempだけなのですがselect from で2つのテーブルを扱っているように見せてます。 RDBの例題で、社員マスタに社員/上長が混在しているようなサンプルがあると思いますよ。 Oracle の EMPLOYEES等のサンプル
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。すみません。From忘れてましたね。 1.号機ごとに、基板温度が50度以上となった最初の日付と基板温度を検索 select 号機, 日付, 基板温度 from t_temp where (号機, 日付) in ( select 号機,min(日付) from t_temp where 基板温度 >= 50 group by 号機 ) order by 号機 または select t1.号機, t1.日付, t1.基板温度 from t_temp t1, (select 号機, min(日付) as 日付 from t_temp where 基板温度 >= 50 group by 号機 ) t2 where t1.号機 = t2.号機 and t1.日付 = t2.日付 order by 1, 2 のほうがわかりやすいかも。 2.号機ごとに、基板温度が最高温度の日付と基板温度を検索 select 号機, 日付, 基板温度 from t_temp where (号機, 基板温度) in ( select 号機,max(基板温度) from t_temp group by 号機 ) order by 号機, 日付 または select t1.号機, t1.日付, t1.基板温度 from t_temp t1, (select 号機,max(基板温度) as 基板温度 from t_temp group by 号機 ) t2 where t1.号機 = t2.号機 and t1.基板温度 = t2.基板温度 order by 1, 2 のほうがわかりやすいかも。
お礼
早速のご回答ありがとうございます。 実機で検証してみます。 ところで、"select t1.号機, t1.日付, t1.基板温度"のところの "t1.号機"などは、どのような意味になるのでしょうか。 t1やt2を使用した例での、 select以下の部分、from以下の部分等々が、 正直どのような意味合いの記述なのかがわかりません。 それぞれ二つの記述例を見比べるしかないのでしょうか。
補足
度々すみません。 1項、2項ともt1,t2を使用しない例で検証してみました。 結果は残念ながら上手くいきませんでした。 ODBCの呼び出しが上手くいかないようです。 SQL Plusから実行してみたいと思います。 ところで追加の質問があります。 "where (号機, 日付) in"または"where (号機, 基板温度) in "といった 記述をされていますが、通常は "where 列名 in (値1, 値2)"といった使用方法ではないのでしょうか。 例で記述していただいた書式ですと、どのような意味になるのでしょうか。 よろしければご教授ください。 よろしくお願いいたします。
- bin-chan
- ベストアンサー率33% (1403/4213)
実機での試験をしてませんが。 1は、50度以上になったことが無いと号機が返りません。必要に応じて外部結合を検討してください。 特に2は、最高温度が複数日あるとおかしくなるかも。 いずれも、副問い合わせ()内のSelectで、あたりをつけます。 外側のSelectのWhereを()で列挙するところがポイント。 1.号機ごとに、基板温度が50度以上となった最初の日付と基板温度を検索 select 号機, 日付, 基板温度 where (号機, 日付) in ( select 号機,min(日付) where 基板温度 >= 50 group by 号機 ) order by 号機 2.号機ごとに、基板温度が最高温度の日付と基板温度を検索 select 号機, 日付, 基板温度 where (号機, 基板温度) in ( select 号機,max(基板温度) group by 号機 ) order by 号機, 日付
補足
度々すみません。 1項、2項ともt1,t2を使用しない例で検証してみました。 結果は残念ながら上手くいきませんでした。 ODBCの呼び出しが上手くいかないようです。 SQL Plusから実行してみたいと思います。 ところで追加の質問があります。 "where (号機, 日付) in"または"where (号機, 基板温度) in "といった 記述をされていますが、通常は "where 列名 in (値1, 値2)"といった使用方法ではないのでしょうか。 例で記述していただいた書式ですと、どのような意味になるのでしょうか。 よろしければご教授ください。 よろしくお願いいたします。