2017-09-03 50 views
2

我試圖從數據在下面的格式獲得的5種分鐘價格9長度移動平均線:MySQL的5分鐘移動平均線(分組按日期範圍行)

ID,價格,時間表

1 15.36573000 2017-08-31 22:00:00 
1 15.29229000 2017-08-31 21:55:00 
1 15.23297000 2017-08-31 21:50:00 
1 15.23469000 2017-08-31 21:45:00 
1 15.23234000 2017-08-31 21:40:00 
1 15.25399000 2017-08-31 21:35:00 
1 15.26228000 2017-08-31 21:30:00 
1 15.21136000 2017-08-31 21:25:00 
1 15.29847000 2017-08-31 21:20:00 
1 15.32074000 2017-08-31 21:15:00 
1 15.32239000 2017-08-31 21:10:00 
1 15.27938000 2017-08-31 21:05:00 
1 15.25282000 2017-08-31 21:00:00 

因此,對於9個時間段(45分鐘)的平均值爲:

8/31/2017 21:45 through 8/31/2017 21:05 = 15.26840444 
8/31/2017 21:40 through 8/31/2017 21:00 = 15.27041889 
8/31/2017 21:35 through 8/31/2017 20:55 = 15.27291889 

我見過的一天,但無法確定幾個移動平均線如何按最後9個時間戳分組

回答

0

在MySQL中處理此問題的一種方法是通過相關子查詢。請注意,在下面的查詢中,我不計算以前數據點的數量,而是依賴於時間差異(40分鐘)。這似乎更有意義,因爲您的數據可能並不總是具有相同的點數。

SELECT 
    CONCAT(CAST(t1.timeline - INTERVAL 40 MINUTE AS CHAR(50)), ' through ', 
      CAST(t1.timeline AS CHAR(50))) AS window, 
    (SELECT AVG(t2.price) FROM yourTable t2 
    WHERE t2.timeline 
     BETWEEN t1.timeline - INTERVAL 40 MINUTE AND t1.timeline) AS avg_price 
FROM yourTable t1 
WHERE 
    t1.timeline >= (SELECT MIN(timeline) + INTERVAL 40 MINUTE FROM yourTable) 
ORDER BY t1.timeline 

演示在這裏:

Rextester

+0

,完美的工作。在一個側面說明中,我意識到由於某種原因,我不能這樣做,因爲某些原因(當我將數據從我的視圖複製到一個表然後它工作...對視圖運行相同的查詢卻瘋狂) ......我一直在爲此工作好幾天,儘管如此也不會再浪費時間來弄清楚爲什麼。謝謝你 –

+0

蒂姆我想出了爲什麼我的觀點不起作用 - 因爲我有多個ID - 我如何根據子查詢中的不同ID進行分組? –

+0

WHERE t2.symbol_id = t1.symbol_id AND t2.timeline BETWEEN .... –