我想根据过去12个月的间隔找到一个平均值

时间:2019-01-29 12:32:33

标签: sql sql-server

我想根据期间列找到值列的平均值 向后12个月。您如何将其应用于SQL?

(列数据由值得nchar(6)的月份和年份组成)

请帮助专家,谢谢。

enter image description here

3 个答案:

答案 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上,并且PeriodINT,则可以使用以下平均窗口函数来计算去年每一行的运行平均值:

SELECT
    T.*
    AverageOverLastYear = AVG(T.Value) OVER (
        ORDER BY 
            T.Period ASC 
        ROWS 
            BETWEEN 11 PRECEDING AND CURRENT ROW)
FROM
    YourTable AS T

这还假定您具有每个月的记录,因为它将对前几行进行平均,而不考虑它们是否实际上是前一个月。如果您可能有差距,请考虑使用NULL插入值,或使用另一种动态分组方法。

相关问题