我有一個表中的SQLite使用pysqlite:SQLite的 - 計算移動平均
create table t
(
id integer primary key not null,
time datetime not null,
price decimal(5,2)
)
我從這個數據如何計算moving average與窗口X秒大與SQL語句?
我有一個表中的SQLite使用pysqlite:SQLite的 - 計算移動平均
create table t
(
id integer primary key not null,
time datetime not null,
price decimal(5,2)
)
我從這個數據如何計算moving average與窗口X秒大與SQL語句?
均線與x
單位大的窗口,在時間i
由下式給出:
(x[i] + x[i+1] + ... + x[i+x-1])/x
計算它,你想使大小x
的LIFO堆棧(你可以作爲一個queue
器) ,並計算其總和。然後,您可以通過添加新值並從舊和中減去舊值來更新總和;你從數據庫中獲得新的元素,並從堆棧中彈出第一個元素。
這有道理嗎?
據我瞭解你的問題,你不希望平均在過去的N項,但在過去的X秒,我是否正確?
好了,這個給你所有的價格記錄列表中的最近720秒:
>>> cur.execute("SELECT price FROM t WHERE datetime(time) > datetime('now','-720 seconds')").fetchall()
當然
,可以喂,要在AVG-SQL函數,得到的平均價格在該窗口:
>>> cur.execute("SELECT AVG(price) FROM t WHERE datetime(time) > datetime('now','-720 seconds')").fetchall()
您還可以使用其他時間單位,甚至鏈接它們。 例如,獲得的平均價格在過去的一個半小時,這樣做:
>>> cur.execute("SELECT AVG(price) FROM t WHERE datetime(time) > datetime('now','-30 minutes','-1 hour')").fetchall()
編輯:SQLite的日期時間基準可以發現here
嗯,好,但我想要一個SQL SELECT,使它。 – microo8 2012-04-17 10:13:05
@ microo8沒有一個。 (至少在我所知道的最好的情況下。)以上是非常簡單的,不是嗎? – katrielalex 2012-04-17 11:46:34
如果你絕望,你可以在SQL語句中做它,但這實際上不是SQL設計的目的。檢索數據,然後用您最喜歡的編程語言執行數學運算。 – 2012-04-17 13:31:09