MS Access - 每日平均数据的SQL查询

时间:2017-01-11 01:37:35

标签: sql ms-access aggregate-functions average

我有一组跨越3天的数据。根据左边的第一列,是否可以根据每天的数据计算左起第三列中值的平均值?

最终结果将是两列:

1/1/2008 | 1.605 
2/1/2008 | 1.59 
3/1/2008 | 1.56

我认为逻辑将像循环一样:

  • 根据第一列中的日期,如果是同一天,则计算行数并将第三列的值相加
  • 使用第三列的值之和除以行数以获得平均值
  • day + 1

但是我们如何在MS Access中实现循环?

以下是数据集:

enter image description here

编辑: 如果我想按日期分组,那天是在昨天的下午6点到今天的下午6点之间?

BETWEEN子句用于检查昨天的18:00:00到今天的18:00:00之间的记录。例如,对于 1/1/2008 ,记录将从1/1/2008 6:00PM开始到2/1/2008 6:00PM。对于 2/1/2008 ,记录将从2/1/2008 6:00PM开始到3/1/2008 6:00 PM`。等等......

我有一个代码片段,用于检查:

([In process analysis result].[Date Time]) Between Date()-1+#12/30/1899 18:0:0# And Date()+#12/30/1899 18:0:0#)

但它只在前一天组合。我该如何申请这组数据?

编辑2: 这是我所做的查询,但仍然不正确。知道什么是错的吗?

SELECT DateValue([Date Time]) As DateValue, Avg([MFR g/10min]) AS [AvgOfMFR g/10min]
FROM [In process analysis result]
WHERE ((([Date Time])>Now()-365) AND (([Operation Grade-Load]) Like "EX*") AND (([Date Time]) Between [Date Time]-1+#12/30/1899 18:0:0# And [Date Time]+#12/30/1899 18:0:0#))
GROUP BY DateValue([Date Time]);

2 个答案:

答案 0 :(得分:0)

选择值的AVG和GROUP BY日期

答案 1 :(得分:0)

你的逻辑看起来基本正确。 where子句取消了。从这开始:

SELECT DateValue(DateAdd("h", 6, [Date Time])) As DateValue,
       Avg([MFR g/10min]) AS [AvgOfMFR g/10min]
FROM [In process analysis result]
WHERE [Date Time] > DateAdd("yyyy", -1, DateAdd("h", 6, Now())) AND
      [Operation Grade-Load] Like "EX*" 
GROUP BY DateValue(DateAdd("h", 6, [Date Time]));
  

我不确定BETWEEN条件应该做什么。如果   你想要一个特定的日期范围,只需使用日期常量。

修改:日期/时间应偏移6小时,如上所述。应该使用适当的1年后表达。不确定当前时间是否也应该移动6小时(如图所示);如果没有,只需删除Now()的 DateAdd