2012-04-17 456 views

回答

1

均線與x單位大的窗口,在時間i由下式給出:

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

計算它,你想使大小x的LIFO堆棧(你可以作爲一個queue器) ,並計算其總和。然後,您可以通過添加新值並從舊和中減去舊值來更新總和;你從數據庫中獲得新的元素,並從堆棧中彈出第一個元素。

這有道理嗎?

+1

嗯,好,但我想要一個SQL SELECT,使它。 – microo8 2012-04-17 10:13:05

+0

@ microo8沒有一個。 (至少在我所知道的最好的情況下。)以上是非常簡單的,不是嗎? – katrielalex 2012-04-17 11:46:34

+0

如果你絕望,你可以在SQL語句中做它,但這實際上不是SQL設計的目的。檢索數據,然後用您最喜歡的編程語言執行數學運算。 – 2012-04-17 13:31:09

3

據我瞭解你的問題,你不希望平均在過去的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