<テーブル>を使用してOracle8の装置温度データを月ごとに集計する方法

このQ&Aのポイント
  • Oracle8のテーブルに蓄積された装置温度データを月ごとに集計する方法を教えてください。
  • select文を使用して、一定期間の範囲で装置温度の最大、最小、平均を求めることはできました。
  • しかし、月ごとに集計する方法がわかりません。どのような記述をすればよいでしょうか。
回答を見る
  • ベストアンサー

<テーブル>

<テーブル> 年月日、号機、装置温度、外気温度、時刻 Oracle8において上記のテーブルが有り、復数台の装置に関して 毎日365日データを蓄積しています。 ある一定期間の範囲で、月毎に装置ごとに装置温度の最高、最低、平均、 求めたいのですが、select文はどのように記述したらよいのでしょうか。 select 号機, MAX(装置温度),min(装置温度),avg(装置温度) from テーブル where sdate between '2009/08/01' and '2009/08/02' group by 号機; 上記のような記述で、一定期間における最大、最低、平均は求まりました。 これを月毎に求めたいのです。 結果は以下のように表示させたいと考えています。 号機、8月装置最大温度、8月装置最低温度、8月装置平均温度、9月装置最大温度、9月装置最低温度、9月装置平均温度… よろしくお願いします。

  • Oracle
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

8の環境がないので、動作する保障はできませんが、 select 号機, max(decode(月, '08', "MAX装置温度")) as "8月装置最大温度", max(decode(月, '08', "MIN装置温度")) as "8月装置最低温度", max(decode(月, '08', "AVG装置温度")) as "8月装置平均温度", max(decode(月, '09', "MAX装置温度")) as "9月装置最大温度", max(decode(月, '09', "MIN装置温度")) as "9月装置最低温度", max(decode(月, '09', "AVG装置温度")) as "9月装置平均温度" from ( select 号機, substr(年月日, 6, 2) as 月, max(装置温度) as "MAX装置温度", min(装置温度) as "MIN装置温度", avg(装置温度) as "AVG装置温度" from テーブル where 年月日 between '2009/08/01' and '2009/09/30' group by 号機, substr(年月日, 6, 2) ) group by 号機; 月毎の表示を柔軟にしたければ、動的SQLにしてください。 # 本来はアプリケーションの仕事でしょう。

number1185
質問者

お礼

ご回答ありがとうございます。 項目名等を読み替えて、明後日に試して見ます。 9月以降も10月11月…と続くのですが、やはり SQLの範疇ではないのですね。 月ごとに吐き出させて、上位側で処理することを検討いたします。 ありがとうございました。

関連するQ&A

  • 電解コンデンサの周囲温度の計算方法について教えて…

    電解コンデンサの周囲温度の計算方法について教えてください。 屋外装置内にある電解コンデンサの寿命を計算しようと思いますが、 周囲温度はどのように求めればよいか教えていただけませんでしょうか。 設置場所は日本中であるため、一定の設置場所ではありません。 下記3つを含めてどのような求め方をするべきなのでしょうか。 それぞれの最大温度条件で計算するべきなのでしょうか。 ?装置周辺の平均周囲温度  日本の平均温度を使うのでしょうか。なお、平均上昇温度の記載はありますが、平均温度の記載は見当たりません。 ?日射による装置上昇温度 ?1日8時間の運転で、運転と停止で温度が異なる。 宜しくお願いします。

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

    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からパススルークエリで実行しています。 補足が必要でしたら、ご指摘いただけると幸いです。 皆様のお力を借用したく、お願いいたします。

  • SQLのテーブルにないデータの出力

    SQLのSelect文である期間を日別に出力したいのですが、どのようにすればいいのでしょうか テーブルのデータは期間全部が入っているのではなく。 データが存在しない日もあります。 データが存在しない日は日にちをのぞいて空白になるようにしたいです。 例として、 テーブル上のデータ 2013-08-01  ああああ 2013-08-03  いいいい 2013-08-06  うううう 出力したいデータ 期間2013-08-01~2013-08-10 2013-08-01  ああああ 2013-08-02 2013-08-03  いいいい 2013-08-04 2013-08-05 2013-08-06  うううう 2013-08-07 2013-08-08 2013-08-09 2013-08-10 上記のような形で出力したいのですが、 どのようにすればいいのでしょうか http://bitstar.jp/blog/?p=2468 のように別のテーブルを用意する以外のやり方でお願いします。 よろしくお願いいたします。

  • 2つのテーブルの結合に関してです

    お世話になります PHP5,MySql5.0.33にて開発を行っています 2つのテーブルの結合部分で困っています TABLE1 ---------------------------------- ID DATE1 DATE2  COUNT ---------------------------------- 1  2/27  2/20  10 2  2/27  2/20  10 ---------------------------------- TABLE2 ---------------------------------- ID DATE1 DATE2 COUNT ---------------------------------- 1  2/21  2/26  5 2  2/21  2/27  5 ---------------------------------- 上記2つのテーブル(TABLE1/TABLE2)から TABLE1のDATE1=2/27より過去の行とTABLE2のDATE2=2/27より過去の行を 取得したいのですが上手くいかず…(下SQLで記述しています) SELECT DISTINCT TABLE1.* FROM TABLE1,TABLE2 WHERE TABLE1.ID=TABLE2.ID AND TABLE1.ID=1 AND (TABLE1.DATE1<='2009/2/27' OR TABLE2.DATE2<='2009/2/27') (結合のそもそもの理解が間違っているかも知れませんが…;) 宜しくお願いします

    • ベストアンサー
    • MySQL
  • 年齢分布テーブルの再集計SQL

    テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。

  • 異なるテーブルから一括でデータを取得したい

    異なるテーブルから一括でデータを取得したいと思っています。 現在思いつくのはunionによる結合なのですが、いささかぶさいくではないか?と思ってます。 select a,b,c from x1,y,z where A union select a,b,c from x2,y,z where A ・・・ 上記のように、x1,x2が一定の数字でいくつも対象となります。 fromにはワイルドカードが使えないので、どのようにしたものかと悩んでおります。 ※selectで取得するカラム名は全テーブル同一で、検索条件も同一です。 unionがあるべき姿なのでしょうか?

  • 冷却水用クーラー

    名前がこれであっているか疑問なんですが、ワイヤー加工機についている水の温度を一定に保つための装置がありますけど、これって水の温度を一定に保つ代わりにその装置から熱い空気がでてきて工場内の温度を一気に上げてしまい、工場に設置しているエアコンが効かなくなるまで温度が上昇してしまうんですが、同じような体験をしている人で解決した方はいらっしゃいますか? ワイヤーを6台使ったときなど、外より工場内の方がかなり暑いです。 この温風をどううまく処理しているか教えてください。

  • 損益計算書のようなものをピボットテーブルで

    お世話になります。 エクセル2000で会社の収支を管理しています。 Sheet1~12にそれぞれ1~12月分の収支を下記のように記述しています。 日付   科目  借方  貸方 3/1  通信費  1,000 3/2  交際費  2,000 3/3  雑収入       3,000 ・ ・ ・ これを 科目   1月  2月  3月・・・ 通信費  400  300  200 交際費  500  400  300 雑収入  600  500  400 上記のように年間の総収支を月別にピボットテーブルで集計したいのですが、うまく出来ません。 毎月の収支をどのように記述すれば可能になりますでしょうか? ピボットテーブル初心者ですので、検討違いでしたらごめんなさい。 宜しくお願いいたします。

  • 結合したテーブルに名前をつけるには?

    お世話になります。 【前提】 Aテーブル |key|hoge|int1|int2| (keyはユニーク) Bテーブル |key|hogehoge| (keyはユニーク) 上記のテーブルを、下記のSQLで結合。 SELECT `A`.`key`,(`A`.`int1` / `A`.`int2` ) as `kekka`, `B`.`hogehoge` From `A` left join `B` on `A`.`key` = `B`.`key` 【目的】 ユニークではない`A`.`hoge`の重複を省き、かつ、`kekka`が最大のものを選びたい。 【考え方】 `A`.`hoge`でグループ化し、max(`kekka`)を選ぶ。 【そのために】 SELECT `A`.`key`,(`A`.`int1` / `A`.`int2` ) as `kekka`, `B`.`hogehoge` From `A` left join `B` on `A`.`key` = `B`.`key` IN(SELECT max(`kekka`) FROM `●●` GROUP BY `A`.`hoge`) ★質問です。 1)根本的に足りてない知識は何でしょうか? 2)上記の考え方で間違っていませんか? 3)●●には何を入れればよいでしょうか? (`A`を指定してみましたが、Unknown column 'kekka' in 'field list'といわれてしまいました) MySQLのバージョンは5.1.57です。

  • アクセスでtableを構成する良い方法教えてください

    何度かアクセスで質問をしているものです。 最初に戻って作り直そうかと。。。。 装置番号  メーカー  型番 ・・・・ 11-02-003 aa物産  901i ・・・ 11-02-004 bb物産  602a ・・・ 21-02-001 cc物産  609a ・・・ 21-02-002 bb物産  702a ・・・ 31-02-001 aa物産  702b ・・・ 31-02-002 bb物産  608a ・・・ 31-02-003 cc物産  702a ・・・ 上記のようなデータがあり、装置番号を付与するとき 最初の2桁11、21と31のそれぞれで、末尾3桁が連番なので 最大値プラス1をしていきたいです (右三桁が連番です) 11-02-004の後に11-02-005の出し方が出来ませんでした。 それならば、最初の2桁11、21と31は別々にtableを作ったほうが いいですか? 分けて作ると60くらいのtableを作らなければ なりません、どのような作り方がいいか教えてください。 アクセス初心者用を見ていますが”これなら”というのが みつかりません。 よろしくお願いします。