Рассчитать среднее значение за последние 12 месяцев для каждого месяца? - PullRequest
1 голос
/ 27 марта 2020

У меня есть SQL серверная таблица со значениями:

 CREATE TABLE [dbo].[MonthleyAvarage](
    [Boxes] [int] NULL,
    [DateMonthly] [date] NULL
) ON [PRIMARY]
GO

insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (1,'01/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (10,'02/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (5,'03/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (9,'04/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (3,'05/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (7,'06/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (5,'07/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (4,'08/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (55,'09/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (6,'10/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (8,'11/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (0,'12/01/2010')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (2,'01/01/2011')
insert into MonthleyAvarage ([Boxes],[DateMonthly]) values (1,'02/01/2011')

enter image description here

Я пытался вычислить среднее значение за последние 12 месяцев для каждый месяц, но я достигаю этого только для того, чтобы взять среднее кумулятивное значение, а не только за последние 12 месяцев

select AVG(Boxes) over (order by DATEADD(MONTH, DATEDIFF(MONTH, 0, DateMonthly), -12)) as avarage,DateMonthly,Boxes 
from monthleyavarage

Как я могу просто взять последние 12 месяцев? Чтобы быть таким:

enter image description here

Как мне сделать это, пожалуйста?

1 Ответ

1 голос
/ 27 марта 2020

Вы можете использовать оконные функции с соответствующим предложением окна:

select 
    boxes,
    dateMonthly,
    avg(boxes) 
        over(order by dateMonthly rows between 11 preceding and current row) avg_boxes
from monthleyavarage

Это дает вам среднее значение текущего месяца и 11 предыдущих.

...