我需要根据时间戳和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分钟))。我怎么能这样做?
答案 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>
插入两个子查询中。