質問: SQL(Oracle11g)を使って毎月定期的にあるデータの累計を集計する作業をしています。 これが意外と時間が掛かるのである程度自動的にファイル作成をしたいのですが、 SQL文の書き方についてどなたかご教示頂けないでしょうか? 例えば4月になったら1~3月の累計、5月になったら1~4月の累計を出すのです 今は1つのSQL文を毎回毎回書き換えてファイルに手で追記しています。 初心者ですみませんが、よろしくお願い致します。 <データベース> 日付 系統 教科 点数 2016/01/01 文系 国語 70 2016/01/01 文系 社会 50 2016/01/01 理系 化学 60 2016/01/02 文系 古文 80 2016/01/03 文系 国語 80 2016/01/03 理系 数学 50 2016/01/04 理系 物理 50 2016/01/04 理系 化学 90 2016/01/04 文系 国語 80 2016/01/04 文系 国語 80 2016/01/05 理系 数学 99 ・ ・ ・ 2016/05/05 文系 古文 30 ・ ・ 延々と続く <集計されたファイルのデータ> 2016/01 文系 国語 310 2016/01 文系 社会 50 2016/01 理系 化学 150 ・ ・ ・ 2016/02 理系 物理 500 2016/02 文系 現文 160 ・ ・ ・
回答: sysdate関数をwhere句に用いてみるのはいかがでしょうか。 以下のように実行すると「yyyy/mm/dd」形式の現在日付が取得できます。 ``` select to_char(sysdate,'yyyy/mm/dd') from dual; ``` 1月1日に関しては、「to_char(sysdate, 'yyyy')||'01/01'」のように指定し、 終了日付に関しては「to_char(sysdate, 'yyyy/mm')||'/01'」のように指定し未満として範囲指定すれば固定SQLで希望のデータ取得が行えるかと思います。 ※データ量にもよりますが、速度は遅いSQLです。。。