0

我在 Access 中有一个表,它是一个 ODBC 连接,我通过 VBA 查询我的数据,仅在某些字段中使用不等于 0 的值进行平均,而在其他字段中我不需要清理值。TABLE1 中的值是每 5 秒作为数据类型的两倍,我希望每分钟或每小时有一个平均值。

INSERT INTO TABLE2(
timestamp,
FilteredAverage1,
Average2)

SELECT 
Cdate(format( TABLE1.timestamp ,’dd/mm/yyyy hh:nn:00)),
AVG(iif(TABLE1.Column1 = 0, null, TABLE1.Column1)),
AVG(TABLE1.Column2)

FROM TABLE1
GROUP BY Cdate(format( TABLE1.timestamp ,’dd/mm/yyyy hh:nn:00))

该查询有点工作,但我主要担心的是,它不仅会删除等于 0 之前的平均值,而且如果我有一个像 7,7802863 这样的值,它会转换该值,使用 7,782863 删除十进制中的 0而是。它怎么会这样?

任何帮助将非常感激。

4

1 回答 1

0

我想您可以尝试使用 SQL WHERE 而不是 VB 函数 Iif 过滤您的数据集

INSERT INTO TABLE2(
timestamp,
FilteredAverage1,
Average2)
SELECT 
Cdate(format( TABLE1.timestamp ,’dd/mm/yyyy hh:nn:00)),
AVG(TABLE1.Column1),
AVG(TABLE1.Column2)
FROM TABLE1
WHERE TABLE1.Column1 <> 0 
GROUP BY Cdate(format( TABLE1.timestamp ,’dd/mm/yyyy hh:nn:00))
于 2022-02-17T12:50:03.917 回答