2015-06-09 36 views
0

我有一張儲存時間,heart_rate和player_id的表格。我需要以某種方式取得最近五分鐘內的平均心率數據,並將每個平均值與球員ID進行分組。如何平均來自SQL數據庫的最後5分鐘條目?

+2

你被困在什麼地方?過濾器?平均?該團隊通過? –

+0

我知道如何按玩家ID分組。給我帶來最大麻煩的部分是過濾器以及如何將平均值整合到其中。 –

+0

請用你正在使用的數據庫標記你的問題。 –

回答

3

另一種選擇是使用DATEDIFF

SELECT AVG(heart_rate) AS heart_rate, 
     player_id 
FROM tablename 
WHERE DATEDIFF(MINUTE, time, GETDATE()) < 5 
GROUP BY player_id 
+0

請勿使用'datediff()'。它計算兩次之間的分鐘數*。它不會測量兩次之間的分鐘數。 –

+1

我喜歡你的答案使用DateAdd,並可能在99%的時間內使用該方法。但是,你能告訴我DateDiff會失敗嗎?這是一個性能問題還是一個精確問題? – JamieD77

+0

這既是一個性能問題,也是一個精確問題。查詢之間的性能不能利用where子句的索引。精確度,因爲2014-12-31和2015-01-01(1天,可能爲1秒)之間爲1年,但2012-01-01和2012-12-31(365天)之間爲0年。分鐘會發生同樣的事情。 –

2

這部分是對多納爾的回答(太長的評論)的響應。

你做要使用以下命令:

WHERE datepart(minute, (time - GETDATE())) < 5 

有兩個原因。首先,這不能利用time上的索引。也就是說,計算是不可靠的。其次,減法是向後的,除非將來的值爲time

一種更好的方式來寫是這樣的:

select player_id, avg(heart_rate) 
from table t 
where time >= dateadd(minute, -5, getdate()) 
group by player_id;