【问题标题】:mysql avg in neighborhood dates附近日期的mysql平均值
【发布时间】:2012-10-03 17:44:55
【问题描述】:

我有一张桌子和

datetime (every 15 mins) | value 

如何显示

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

【问题讨论】:

  • 这对我来说毫无意义。您只是想在value 上加/减 15 分钟吗?请提供更多信息。
  • 请发布一些示例数据和预期结果。

标签: mysql datetime average


【解决方案1】:

我建议您在表中放置一个自动递增的 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 不为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2015-10-27
    • 2015-07-28
    • 2012-04-21
    相关资源
    最近更新 更多