Sql 12个月移动平均线(按人、日期)

Sql 12个月移动平均线(按人、日期),sql,ms-access,ms-access-2010,moving-average,Sql,Ms Access,Ms Access 2010,Moving Average,我有一个表[production],其中包含以下结构: rep (char(10)) ,cyc_date (datetime) ---- already standardized to mm/01/yyyy ,amt (decimal) 我有2011年1月1日至2013年8月1日期间每个代表的数据。我希望能够为每个代表创建一个从2012年1月1日开始的12个月移动平均值,如下所示: rep cyc_dt 12moAvg ------------------------- A

我有一个表[production],其中包含以下结构:

rep (char(10))    
,cyc_date (datetime) ---- already standardized to mm/01/yyyy
,amt (decimal)
我有2011年1月1日至2013年8月1日期间每个代表的数据。我希望能够为每个代表创建一个从2012年1月1日开始的12个月移动平均值,如下所示:

rep    cyc_dt    12moAvg
-------------------------
A      1/1/2012    10000.01
A      2/1/2012    13510.05
.      ........    ........
A      8/1/2013    22101.32
B      1/1/2012    98328.22
B      ........    ........
其中,每行代表所述代表在规定时间的12个月移动平均值。我找到了一些模模糊糊接近的例子,我试了试都没用。似乎添加了group by rep组件是与其他示例的主要区别

这大概是我所知道的:

SELECT
    rep,
    cyc_date,
    (
        SELECT Avg([amt])
        FROM production Q
        WHERE Q.[cyc_date] BETWEEN DateAdd("yyyy",-1,[cyc_date]+1) AND [cyc_date]
    ) AS 12moavg
FROM production

由于相关子查询中没有分组,因此该查询似乎提取了总体平均值或总和。当我尝试按分组时,我得到一个错误,它最多只能返回一行。

我认为它可能需要对相关子查询进行两次调整

在DateAdd表达式中减去11个月。 包括另一个WHERE条件,将平均值限制为与包含查询的父查询的当前行相同的代表。 选择 p、 代表, p、 cyc_日期, 选择AvgQ.amt 从生产到质量 哪里 Q.rep=p.rep 和 Q.cyc\U日期介于日期ADDM,-11之间,p.cyc\U日期 和p.cyc_日期 AS[12moavg] 从生产中提取p;
相关子查询可能很慢。确保索引rep和cyc\u date以限制此项的痛苦。

cyc\u dt中的值是否始终是当月的第一天?是的,抱歉,这不清楚。每个周期的日期标准化为每月1日。谢谢。那么对于rep A和cyc_dt 2012年1月1日,12moAvg是否代表2011年1月1日至2011年12月1日的平均金额值,或者您是否也将2012年1月1日的平均金额值包含在该平均值中?我想,为了使其成为一个真实的12个月期间,包括当前期间,我会说2012年1月1日的值应包括2011年2月1日至2012年1月1日的数据,端点包括在内。这很有意义,谢谢。现在您熟悉以下哪一项:DateAdd;相关子查询;达夫?宾果。这非常有效。我没有考虑在WHERE语句中显式设置rep相关性。我的头脑完全陷入了一条聚合路线。非常感谢你的帮助。希望这也能对其他人有所帮助。另外,同意对非聚合字段进行索引。幸运的是数据不是太大,所以它运行得比较快。好的,很好。一旦您向我们展示了SQL,我可以看出您与相关子查询非常接近,但只需要通过rep限制平均值。感谢您展示了SQL!