2012-06-15 173 views
0

我有以下查詢計算5日簡單移動平均線。我想將查詢更改爲5天指數移動平均線mysql計算5日指數移動平均線

DROP TABLE IF EXISTS t; 
CREATE TABLE t (id int,item int, dt DATE, qty INT); 
INSERT INTO t VALUES 
(1,1,'2007-1-1',5), 
(2,1,'2007-1-2',6), 
(3,1,'2007-1-3',7), 
(4,1,'2007-1-4',8), 
(5,1,'2007-1-5',9), 
(6,1,'2007-1-6',10), 
(7,1,'2007-1-7',11), 
(8,1,'2007-1-8',12), 
(9,1,'2007-1-9',13), 
(10,2,'2007-1-1',6), 
(11,2,'2007-1-2',7), 
(12,2,'2007-1-3',8), 
(13,2,'2007-1-4',9), 
(14,2,'2007-1-5',10), 
(15,2,'2007-1-6',11), 
(16,2,'2007-1-7',12), 
(17,2,'2007-1-8',13), 
(18,2,'2007-1-9',14); 

SELECT 
t1.id,t1.item,t1.dt,t1.qty, 
(SELECT SUM(t2.qty)/COUNT(t2.qty) 
    FROM t AS t2 
    WHERE t1.id - t2.id =4 
) AS '5daySMA' 
FROM t AS t1 
GROUP BY t1.item,t1.dt; 

查詢應該是什麼?

回答

0

我在此刺:

select dt, 
    @a := (@a*.667 + qty*.333) AS moving_avg 
from t 
Join (select @a := 0) as X 
order by dt desc 

0.333爲k = 2 /(N + 1),其中N爲5天期間

0.667爲(1-k)的所看到EMA式

EMA =價格(T)* K + EMA(Y)*(1 - K)

@a:= 0部分應改爲合理#否則會出現在beggining歪斜

從這個討論衍生而來,所以你可以在那裏找到更多的細節 http://grokbase.com/t/mysql/mysql/127gbqzkyj/trouble-with-average