4

私はpysqliteを使用してsqliteにテーブルを持っています:

create table t
(
    id integer primary key not null,
    time datetime not null,
    price decimal(5,2)
)

このデータから、SQLステートメントを使用してウィンドウX秒の大きさで移動平均を計算するにはどうすればよいですか?

4

2 に答える 2

3

私があなたの質問を理解している限り、あなたは最後のN項目の平均を望んでいませんが、最後のx秒間の平均は正しいですか?

さて、これはあなたに過去720秒に記録されたすべての価格のリストを与えます:

>>> cur.execute("SELECT price FROM t WHERE datetime(time) > datetime('now','-720 seconds')").fetchall()

もちろん、それをAVG-SQL-Functionにフィードして、そのウィンドウの平均価格を取得できます。

>>> cur.execute("SELECT AVG(price) FROM t WHERE datetime(time) > datetime('now','-720 seconds')").fetchall()

他の時間単位を使用することもでき、それらを連鎖させることもできます。たとえば、過去1時間半の平均価格を取得するには、次のようにします。

>>> cur.execute("SELECT AVG(price) FROM t WHERE datetime(time) > datetime('now','-30 minutes','-1 hour')").fetchall()

編集:SQLite日時リファレンスはここにあります

于 2012-04-17T12:35:12.743 に答える
1

xウィンドウ単位が大きい場合の移動平均は、時間で次のように与えられますi

(x[i] + x[i+1] + ... + x[i+x-1]) / x

queueそれを計算するには、 sizeの LIFO スタック ( として実装できる) を作成し、xその合計を計算します。次に、新しい値を追加し、古い合計から古い値を減算して、合計を更新できます。データベースから新しいものを取得し、スタックから最初の要素をポップして古いものを取得します。

それは理にかなっていますか?

于 2012-04-17T10:09:43.783 に答える