2012-11-19 110 views
2

我需要根據時間戳和字段1來計算行的平均值。例如,我有如何計算MySQL中的計算平均值?

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

我想這會做到這一點:

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聚合函數忽略空。

要僅檢查特定時間範圍,請將WHERE timestamp BETWEEN <begin> AND <end>插入到兩個子查詢中。

+0

感謝您爲我發佈解決方案Mr. Barmar。但我無法做到這一點。代碼中是否有語法錯誤?我剛剛替換了您提供的腳本中的變量。我也沒有處理問題中提到的處理時間的情況。如果可能的話,你可以給我解釋一下嗎? – ChanChow

+0

修復了一堆語法錯誤,現在就試試吧。 – Barmar

+0

第8行的mm是什麼。它是拼寫錯誤嗎?我正試圖理解你現在的代碼 – ChanChow