答案 0 :(得分:1)
SELECT AVG(VALUE) AS AV
FROM YourTab
WHERE
PERIODE BETWEEN
cast(YEAR(dateadd(month,-11,CAST(PERIODE + '01' as datetime))) * 100
+ MONTH(CAST(PERIODE + '01' as datetime)) as nchar(6)) --go back 11 months for example
AND
cast(YEAR(dateadd(month,0,CAST(PERIODE + '01' as datetime))) * 100
+ MONTH(CAST(PERIODE + '01' as datetime)) as nchar(6)) --go back 0 months, for example
GROUP BY PERIODE
答案 1 :(得分:0)
这可以很容易在带有窗口功能的SQL Server中完成。
在这里看看:Use window functions in SQL server
特别是“值窗口”函数LAG()和LEAD()完全在执行您要查找的操作。
答案 2 :(得分:0)
假设所有这些都放在表而不是Excel上,并且Period
是INT
,则可以使用以下平均窗口函数来计算去年每一行的运行平均值:
SELECT
T.*
AverageOverLastYear = AVG(T.Value) OVER (
ORDER BY
T.Period ASC
ROWS
BETWEEN 11 PRECEDING AND CURRENT ROW)
FROM
YourTable AS T
这还假定您具有每个月的记录,因为它将对前几行进行平均,而不考虑它们是否实际上是前一个月。如果您可能有差距,请考虑使用NULL
插入值,或使用另一种动态分组方法。