SQL - 计算预测平均值
SQL - calculate forecast average
我正在尝试根据前 3 个月的实际或预测计算销售预测。
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,但我想不通。
请帮忙:)
所以你想要基于之前移动平均线的移动平均线:)
我认为在 SQL 服务器上编程时,总是必须意识到哪些任务更适合基于集合的方法,哪些更适合逐行方法。如果您问我,您的任务非常适合简单的逐行处理。这是一个例子
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
我正在尝试根据前 3 个月的实际或预测计算销售预测。
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,但我想不通。
请帮忙:)
所以你想要基于之前移动平均线的移动平均线:) 我认为在 SQL 服务器上编程时,总是必须意识到哪些任务更适合基于集合的方法,哪些更适合逐行方法。如果您问我,您的任务非常适合简单的逐行处理。这是一个例子
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