我有一个子查询,其中包含一年中的平均水库流入日(从 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))