sql计算股票挪动平均价格

sql计算股票移动平均价格
好比股票的价格,4天的价格依次为:
11,13,9,10

第4天的四日移动平均值计算公式为:
1/10*11 + 2/10*13+ 3/10*9 + 4/10*10

其中被除数:10=1+2+3+4

关键是在sql里面获取前面1,2,3天的价格比较搞,理论上要表与自己join 3次才能在同一行中获取到这4个价格数据,如果在动态游标里面循环的话,随便测试了2000行的循环都要4分钟多
关键这里的4天还只是测试用的,一般计算MACD都需要26天的移动平均,我不能同一个表和自己join 25次呀sql计算股票挪动平均价格

怎么能够用t-sql批量的搞定这个事情呀?
------解决思路----------------------
先行转列,然后在同一行中不同字段取得每天的价格来计算.
------解决思路----------------------
个人感觉你这个, 不能交给数据库来计算了。

取出前N天的值, 直接交由客户端自己计算。

------解决思路----------------------
这个先取原始数据,在客户端算吧
------解决思路----------------------
"关键是在sql里面获取前面1,2,3天的价格比较搞,理论上要表与自己join 3次才能在同一行中获取到这4个价格数据"

同一行获取4个价格数据?这个是什么意思?只是按这个公式求值得花干嘛要同一行获取4个价格数据?
------解决思路----------------------
WITH tb_tmp(price) AS
(
SELECT 11 UNION ALL
SELECT 13 UNION ALL
SELECT 9 UNION ALL
SELECT 10
),tb_tmp_f(NO,price) AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)),price FROM tb_tmp
),tb_num(number,total) AS
(
SELECT a.number,b.total FROM (SELECT number FROM spt_values WHERE type='P' AND number>0 AND number<=(SELECT COUNT(1) FROM tb_tmp)) a CROSS JOIN 
(SELECT SUM(number) AS total FROM spt_values WHERE type='P' AND number>0 AND number<=(SELECT COUNT(1) FROM tb_tmp)) b
)


SELECT SUM((number*1.00)/total*price) AS MACD FROM tb_tmp_f a LEFT JOIN tb_num b ON a.NO = b.number