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

时间:2012-11-19 05:39:13

标签: mysql

我需要根据时间戳和group1分组来计算行的平均值。例如,我有一个带

的表
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分钟))。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我认为这样做会:

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>插入两个子查询中。