2012-09-18 100 views
0

我對MYSQL有一些問題,我需要在兩個特定時間之間減去數據,每5分鐘一次,然後平均5分鐘數據。 我現在正在做的是:在兩次特定時間之間每5分鐘減去一次數據

select (avg(columnname)),convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval 
from Databasename.Tablename 
where datetime BETWEEN '2012-09-12 10:50:00' AND '2012-09-12 14:50:00' 
group by datetime div 500; 

這是累計平均。 假設我在11點鐘得到500和在11.05點700,我需要的平均值是(700-500)/ 5 = 40. 但是現在我得到了(500 + 700)/ 5 = 240. 我不需要累計平均值。 請幫助我。

+1

如果你在這個問題中包含測試數據,你將有更好的機會得到一個很好的答案。最好用'create'和'include'語句。 –

+0

謝謝,我沒給你 – user1659213

+0

順便說一句:用'avg'你不會得到'(500 + 700)/ 5 = 240',而是'(500 + 700)/ 2 = 600',因爲它通過計數平均而無需特別關注相關時間。除以5,你必須提供5行輸入,即'(... + ... + ... + ... + ...)/ 5'。 – MvG

回答

0

對於你所談論的那種平均水平,你不想聚合多行使用GROUP BY子句。 INstead,你想要使用同一張表中的兩個不同行來計算結果。這需要一個自聯接:

SELECT (b.columnname - a.columnname)/5, a.datetime, b.datetime 
FROM Database.Tablename a, Database.Tablename b 
WHERE b.datetime = a.datetime + INTERVAL 5 MINUTE 
    AND a.datetime BETWEEN '2012-09-12 10:50:00' AND '2012-09-12 14:45:00' 

ab指向同一個表的兩個不同的行。 WHERE條款確保它們相距5分鐘。

如果沒有第二列與該時間距離匹配,則不會在查詢結果中包含結果行。如果您的表格每五分鐘就完全沒有數據點,但您必須改爲搜索合適的合作伙伴,那麼事情變得更加困難。 This answer也許可以針對該用例進行調整。或者您可以在應用程序級別而不是在數據庫服務器上實現此目標。