2

タイムスタンプに応じて行の平均を計算し、field1 でグループ化する必要があります。たとえば、私はテーブルを持っています

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分))の平均を計算する必要があります。どうやってやるの?

4

1 に答える 1

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>、両方のサブクエリに挿入します。

于 2012-11-19T05:59:45.547 に答える