我想要计算股票的3日移动平均线(实际上30天)量。 我试图得到最后3个日期条目的平均值(而不是今天-3天)。我一直在尝试用SQL Server 2012中的rownumber做些事情,但没有成功。任何人都可以帮忙。下面是一个模板模式,以及我对SQL的垃圾尝试。我有以下SQL的各种化身与分组,但仍然无法正常工作。非常感谢!移动平均PER TICKER为每一天
select dt_eod, ticker, volume
from
(
select dt_eod, ticker, avg(volume)
row_number() over(partition by dt_eod order by max_close desc) rn
from mytable
) src
where rn >= 1 and rn <= 3
order by dt_eod
示例模式:
CREATE TABLE yourtable
([dt_date] int, [ticker] varchar(1), [volume] int);
INSERT INTO yourtable
([dt_date], [ticker], [volume])
VALUES
(20121201, 'A', 5),
(20121201, 'B', 7),
(20121201, 'C', 6),
(20121202, 'A', 10),
(20121202, 'B', 8),
(20121202, 'C', 7),
(20121203, 'A', 10),
(20121203, 'B', 87),
(20121203, 'C', 74),
(20121204, 'A', 10),
(20121204, 'B', 86),
(20121204, 'C', 67),
(20121205, 'A', 100),
(20121205, 'B', 84),
(20121205, 'C', 70),
(20121206, 'A', 258),
(20121206, 'B', 864),
(20121206, 'C', 740);
如果您创建了一个包含Year和BusinessDay(从1到250左右)的Calandar表,那么您可以将它加入到它,并通过BusinesDay(getdate()) - 3到BusinesDay(getdate())进行平均。 – 2013-03-13 20:56:21