繁体   English   中英

如何在MySQL中计算计算平均值?

[英]How to calculate an computed average in MySQL?

我需要根据时间戳和row1分组来计算平均行数。 例如,我有一张桌子

Field1      Field2      TImeStamp
  X           X1    11/19/2012 12:21:32
  X           X2    11/19/2012 12:22:32
  X           X3    11/19/2012 12:24:32
  Y           Y1    11/19/2012 12:21:32
  Y           Y2    11/19/2012 12:22:32
  Y           Y3    11/19/2012 12:23:32
  Y           Y4    11/19/2012 12:24:32

我有这种带有时间戳的表,该时间戳与当前时间以及其他字段一起插入。 现在,我想基于时间戳计算平均值。 例如,我想在特定持续时间内获得最新的平均值+另一个平均值。 在以上情况下,我希望拥有:

Fields   Averaged function
  X        (X3+(X1+X2)/2)/2
  Y        (Y4+(Y1+Y2+Y3)/3)/2

对于上述,我必须计算平均值(现在+平均(现在1分钟到现在5分钟))。 我怎样才能做到这一点?

我认为这可以做到:

select field1, if(avgf2 = 0,maxf2,(maxf2+avgf2)/2) avgfun
from (select m.field1 field1,
             max(if(timestamp = maxts, field2, null)) maxf2,
             coalesce(avg(if(timestamp = maxts, null, field2)),0) avgf2
      from mytable m
      join (select field1, max(timestamp) maxts
            from mytable
            where timestamp between date_sub(now(), interval 5 minute) and now()
            group by field1) mm
      using (field1)
      where timestamp between date_sub(now(), interval 5 minute) and now()
      group by field1) x

关键是像MAX和AVG这样的聚合函数会忽略NULL。

要仅检查特定时间范围,请将WHERE timestamp BETWEEN <begin> AND <end>插入两个子查询中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM