提高在 MS-Access 中计算大型数据集的 7 天滚动平均值的查询的性能

Improve performance of a query calculating 7 day rolling averages over a large dataset in MS-Access

我有一大笔 table 的 300,000 条记录,其中一个字段是日期字段,另一个字段是购买计数。我需要 运行 将每天的七个滚动日平均值(实际上是六个)转换为另一个 table。任何购买日期或数字都可能改变,所以我不能只使用现有数据。

我正在做的是从销售的第 1 天开始,通过 VBA 创建一个循环,然后使用 dsum 执行查询并更新摘要 table,因此初始查询看起来像...

  Select dsum(purchases)/7 from purchases as rollingAvg7 where purchaseDate between #01/11/2020# and #07/11/2020#

到 运行 这些查询每次大约需要两分钟。请问有更好更快的方法吗?

首先,日期值的字符串表达式不能采用 dd/mm/yyyy 格式。使用 ISO 序列,它适用于任何地方,包括 ADO。

接下来,如果购买是每天的合计,直接用Avg求平均值:

select avg(purchases)
from purchases as rollingAvg7 
where purchaseDate between #2020/11/01# and #2020/11/07#

如果您有个人购买 - 每天返回超过一条记录 - 使用 sum / 7