我正在尝试创建一个平均值,该值基于几个平均值的总和。这些次级平均值基于24小时前的样本。
我需要使用样本,因为数据会季节性波动(这是临时数据,因此冬季值会摒弃夏季值等)
我已经解决了几乎存在的以下问题,现在我很难过:
UPDATE `rawdata` a
INNER JOIN (
SELECT `unixstamp`,
AVG(`Temp_Avg`) Temp_Avg,
AVG(`Temp_2_Avg`) Temp_2_Avg,
AVG(`Temp_3_Avg`) Temp_3_Avg,
AVG(`Temp_4_Avg`) Temp_4_Avg
FROM `rawdata` WHERE `unixstamp` BETWEEN `unixstamp` and `unixstamp` - 86400
GROUP BY `unixstamp`
) b on a.`unixstamp` = b.`unixstamp`
SET a.Avg_Soil_Temp = b.Temp_Avg + b.Temp_2_Avg + b.Temp_3_Avg + b.Temp_4_Avg
它不会更新任何行!
我知道错误在于子查询:
SELECT `unixstamp`,
AVG(`Temp_Avg`) Temp_Avg,
AVG(`Temp_2_Avg`) Temp_2_Avg,
AVG(`Temp_3_Avg`) Temp_3_Avg,
AVG(`Temp_4_Avg`) Temp_4_Avg
FROM `rawdata` WHERE `unixstamp` BETWEEN `unixstamp` and `unixstamp` - 86400
GROUP BY `unixstamp`
但是,我不确定它有什么问题。
任何建议都会受到赞赏,我已经过去了
我使用以下内容构建我的查询,也许他们会启发解决方案?
https://stackoverflow.com/a/11615172/1620677
https://stackoverflow.com/a/15716147/1620677
https://stackoverflow.com/a/15545868/1620677
编辑 - 样本数据
考虑这个小数据样本,在根据每一行计算Avg_Soil_Temp之前,必须对每个Temp_Avg列进行平均。在你看几个月的数据之前,它似乎毫无意义。但是,由于季节性变化,我无法对整个色谱柱进行平均,我需要在每个点周围进行大约24小时的样品。
编辑2:注意 - 示例表仅用于说明概念,我不想更改存储在实际数据库中Temp列中的数据,仅在计算Avg_Soil_Temp的子查询中。