トップ «前の日記(2017/06/19) 最新 次の日記(2017/06/22)» 編集

kaztomo日記


2017/06/20

_ [SQL]気分転換に sqlite3 で移動平均

  • 1分足を記録したファイルに対して SQLを行う。
  • 移動平均の計算方法は該当行から始めて 4つ前までの close 値を用い、5移動平均値を算出する。
  • 結果を新たなカラムとして表示する。
% sqlite3 USDJPYm1.db
sqlite> select date,time,close,
  ...> (select avg(close) from hd
  ...>   where rowid between t1.rowid-4 and t1.rowid)
  ...>   from hd as t1 limit 10;
Date|Time|Close|(select avg(close) from hd
 where rowid between t1.rowid-4 and t1.rowid)
2017/06/19|16:15:00|111.168|111.168
2017/06/19|16:16:00|111.175|111.1715
2017/06/19|16:17:00|111.161|111.168
2017/06/19|16:18:00|111.175|111.16975
2017/06/19|16:19:00|111.168|111.1694
2017/06/19|16:20:00|111.172|111.1702
2017/06/19|16:21:00|111.178|111.1708
2017/06/19|16:22:00|111.184|111.1754
2017/06/19|16:23:00|111.177|111.1758
2017/06/19|16:24:00|111.175|111.1772
sqlite>

どうやら、最初の 4行については 5行分のデータが存在しないので、個数を減らして平均値を出しているようだ。

※注意

  • rowid が非連続な場合は正しく計算できない。
  • ROWS BETWEEN A AND B を使いたかったけど、sqlite3 では出来ないようだ orz