0

5 日間の単純移動平均を計算する次のクエリがあります。クエリを 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;

クエリは何ですか?

4

1 に答える 1

1

これで私の刺し傷:

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

.333 は k = 2/(N+1) で、N は 5 日間です

.667 は (1-k) であり、EMA 式で見られる

EMA = 価格(t) * k + EMA(y) * (1 – k)

@a := 0 の部分は合理的なものに変更する必要があります # そうしないと、最初にゆがみが生じます

この議論から派生したので、そこで詳細を探すことができます http://grokbase.com/t/mysql/mysql/127gbqzkyj/trouble-with-average

于 2013-03-04T21:56:39.903 に答える