dポイントプレゼントキャンペーン実施中!

SQL文(クエリ)をご教授ください。

Oracle8において下記のようなテーブルが有り、復数台の装置に関して
毎日365日データを蓄積しています。
日によってデータが採取できない装置があるため、号機に抜けが
生じる事があります。
また実際は装置は14000台程度のデータを収集しています

テーブル名:t_temp

号機  日付   基板温度 Disk温度 外気温度
01  2010/03/01  50    70    25
02  2010/03/01  49    73    25
03  2010/03/01  52    72    25
04  2010/03/01  49    71    25
01  2010/03/02  56    77    26
02  2010/03/02  57    75    26
04  2010/03/02  55    74    27
01  2010/03/03  49    71    24
03  2010/03/03  50    72    25
04  2010/03/03  48    70    23

     以下データは続く



このテーブルから、以下のような2パターンの検索をしたいと考えています。
1.号機ごとに、基板温度が50度以上となった最初の日付と基板温度を検索
2.号機ごとに、基板温度が最高温度の日付と基板温度を検索

参考書なども眺めてみたのですが、糸口が見出せずにいます。
クエリ例と、その説明を説明をいただけると幸いです。

実行環境は、MS-ACCESSからパススルークエリで実行しています。

補足が必要でしたら、ご指摘いただけると幸いです。

皆様のお力を借用したく、お願いいたします。

A 回答 (3件)

t1、t2はエイリアス(別名)です。


fromの後ろでselectしているのでt2というテーブルに見せかけてます。
元テーブルはt_tempだけなのですがselect  from で2つのテーブルを扱っているように見せてます。


RDBの例題で、社員マスタに社員/上長が混在しているようなサンプルがあると思いますよ。
Oracle の EMPLOYEES等のサンプル

この回答への補足

度々すみません。

1項、2項ともt1,t2を使用しない例で検証してみました。
結果は残念ながら上手くいきませんでした。

ODBCの呼び出しが上手くいかないようです。
SQL Plusから実行してみたいと思います。

ところで追加の質問があります。

"where (号機, 日付) in"または"where (号機, 基板温度) in "といった
記述をされていますが、通常は
"where 列名 in (値1, 値2)"といった使用方法ではないのでしょうか。
例で記述していただいた書式ですと、どのような意味になるのでしょうか。

よろしければご教授ください。
よろしくお願いいたします。

補足日時:2010/05/09 18:59
    • good
    • 0

#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
のほうがわかりやすいかも。

この回答への補足

度々すみません。

1項、2項ともt1,t2を使用しない例で検証してみました。
結果は残念ながら上手くいきませんでした。

ODBCの呼び出しが上手くいかないようです。
SQL Plusから実行してみたいと思います。

ところで追加の質問があります。

"where (号機, 日付) in"または"where (号機, 基板温度) in "といった
記述をされていますが、通常は
"where 列名 in (値1, 値2)"といった使用方法ではないのでしょうか。
例で記述していただいた書式ですと、どのような意味になるのでしょうか。

よろしければご教授ください。
よろしくお願いいたします。

補足日時:2010/05/07 16:39
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
実機で検証してみます。

ところで、"select t1.号機, t1.日付, t1.基板温度"のところの
"t1.号機"などは、どのような意味になるのでしょうか。
t1やt2を使用した例での、
select以下の部分、from以下の部分等々が、
正直どのような意味合いの記述なのかがわかりません。

それぞれ二つの記述例を見比べるしかないのでしょうか。

お礼日時:2010/05/07 16:09

実機での試験をしてませんが。


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 号機, 日付
    • good
    • 0

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

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