mysql avg在邻居日期

时间:2012-10-03 17:44:55

标签: mysql datetime average

我有一张表

datetime (every 15 mins) | value 

我如何显示

的平均值
select  avg( value_15mins_before, value, value_15mins_after )

1 个答案:

答案 0 :(得分:0)

我建议您在表格中添加一个自动增量ID。使用时间戳时,事情可能会在几分之一秒内消失,这可能会导致问题。

以下内容将为您提供每个点附近的移动平均线:

select (value + coalesce(tprev.value, 0.0) + coalesce(tnext.value, 0.0)) /
       ((case when value is not null then 1.0 else 0.0 end) +
        (case when tprev.value is not null then 1.0 else 0.0 end) +
        (case when tnext.value is not null then 1.0 else 0.0 end)
       ) as moving_avg
from (select t.*,
             (select max(t2.dt) from t t2 where t2.dt < t.dt) as dt_prev,
             (select min(t2.dt) from t t2 where t2.dt > t.dt) as dt_next
      from t
     ) t left outer join
     t tprev
     on t.dt_prev = tprev.dt_prev left outer join
     t tnext
     on t.dt_next = tnext.dt_next

假设数据中没有“漏洞”。您可以通过在子序列中为dt_prev和dt_next添加约束来解决此问题。 。 。例如,仅考虑在给定值的20分钟内的时间值。

这也假设value不为空。