使用MYSQL使用滚动平均值的总和更新列

时间:2013-07-25 03:11:17

标签: mysql sql join average moving-average

我正在尝试创建一个平均值,该值基于几个平均值的总和。这些次级平均值基于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小时的样品。

table illustrating averaging down and across columns

编辑2:注意 - 示例表仅用于说明概念,我不想更改存储在实际数据库中Temp列中的数据,仅在计算Avg_Soil_Temp的子查询中。

0 个答案:

没有答案