SQL 服务器:平滑的一年中一天的平均值



我有一个子查询,其中包含一年中的平均水库流入日(从 1-365(。现在,我想在新列中计算一年中每天的平滑/移动平均线。

示例:对于 1 月 1 日(一年中的一天 = 1(,我想计算 21 天的平滑平均值(10 天前和 10 天后(。即平均天数范围从(356-11(。 对于第 55 年的某一天,平均值应按一年中的天数计算,范围为 (45-65(。

她是基于一个名为"sub"的子查询的未完成查询,其中 10 年的流入量首先在一年中的某一天取平均值;

DECLARE  @Dager  int ;  
SET  @Dager  =  10; /* # days pre and post the actual day of year to be included in avg */
Select sub.Magasin, sub.DayOfYear, AVG(sub.Inflow) as AvgInflow 
FROM (SELECT Date, Magasin, Datepart(dy,Date) as DayOfYear, Value as Inflow
        FROM inputtable 
        WHERE Date >= DATEFROMPARTS(2008,1,1) and Date <= DATEFROMPARTS(2017,12,31)) sub
GROUP By sub.Magasin, sub.DayOfYear
ORDER BY sub.magasin, sub.DayOfYear

在没有任何示例数据的情况下,我将为 SQL Server 2012+ 建议这样做

(您的 SQL 看起来像 SQL Server 2012+(

SELECT
    Magasin, 
    Datepart(dy,Date) AS DayOfYear, 
    AVG(Inflow) OVER (
        PARTITION BY Magasin 
        ORDER BY YEAR(Date), Datepart(dy,Date)
        ROWS BETWEEN 10 PRECEDING  AND 10 FOLLOWING)
FROM
    inputtable
WHERE 
    Date >= DATEFROMPARTS(2008,1,1) and Date <= DATEFROMPARTS(2017,12,31))

最新更新