我有一张桌子
datetime (every 15 mins) | value
我如何显示平均价值
select avg( value_15mins_before, value, value_15mins_after )
我建议您在表中放置一个自动递增的 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
不为空。