小编典典

SQL-计算预测平均值

sql

我正在尝试根据前三个月的实际情况或预测来计算销售预测。

company_id    Year    Month    Actuals    Forecast 
  123456      2014      1         10     
  123456      2014      2         15     
  123456      2014      3         17     
  123456      2014      4                 14.00
  123456      2014      5                 15.33 
  123456      2014      6                 15.44
  123456      2014      7                 14.93

Month 4 = (10+15+17)/3
Month 5 = (15+17+14)/3
Month 6 = (17+14+15.33)/3
Month 7 = (14+15.33+15.44)/3

假设我要计算 每个 公司未来18个月的预测。

我正在查看去年的数据。一些公司有例如2个月的数据,而其他12个月等等。

我已经搜索并找到了许多不同的解决方案,但是所有这些解决方案都只考虑了实际情况。

我认为我必须进行递归CTE,但我无法弄清楚。

请帮忙 :)


阅读 176

收藏
2021-04-28

共1个答案

小编典典

因此,您想要基于先前的移动平均线的移动平均线:)我认为,在SQL
Server上进行编程时,必须始终意识到哪些任务更适合基于集合的方法,哪些任务更通用。如果您问我,您的任务非常适合简单的逐行处理。这是一个例子

declare @temp table ([Month] int, Actual decimal(29, 2), Forecast decimal(29, 2))
declare @month int

insert into @temp (
    [Month], Actual
)
select 1, 10 union all
select 2, 15 union all
select 3, 17

select @month = isnull(max([Month]) + 1, 1) from @temp

while @month <= 18
begin
    insert into @temp (
        [Month], Forecast
    )
    select
        @month, avg(a.value) as Forecast
    from (
        select top 3 isnull(Actual, Forecast) as value
        from @temp
        order by [Month] desc
    ) as a

    select @month = @month + 1
end

select * from @temp
2021-04-28