Я пытаюсь вычислить, скажем, 3-дневный скользящий средний (на самом деле 30-дневный) объем для акций. Я пытаюсь получить среднее значение из последних 3 записей даты (а не сегодня - 3 дня). Я пытался что-то сделать с rownumber в SQL Server 2012, но без успеха. Может кто поможет. Ниже приведена схема шаблона, и моя попытка мусора в SQL. У меня есть различные воплощения ниже SQL с группой, но все еще не работает. Большое спасибо!Скользящее среднее для 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);
Если вы создали таблицу Calandar с полями Year и BusinessDay (начиная от 1 до 250 или около того), то вы можете присоединиться к своим томам к ней и в среднем по BusinesDay (getdate()) - 3 в BusinesDay (getdate()) , –