2010-07-30 25 views
0

繼承人表,時間當在查詢運行即是現在2010-07-30 22時41分14秒MySQL的總和列,僅返回的條目,並在進入最後10分鐘

number | person | timestamp 
45  mike  2008-02-15 15:31:14 
56  mike  2008-02-15 15:30:56 
67  mike  2008-02-17 13:31:14 
34  mike  2010-07-30 22:31:14 
56  bob  2009-07-30 22:37:14 
67  bob  2009-07-30 22:37:14 
22  tom  2010-07-30 22:37:14 
78  fred  2010-07-30 22:37:14 

標識像一個可以爲每個人添加號碼的查詢。然後只顯示最近一次輸入的姓名總數,例如最近60分鐘。困難似乎是,雖然可能使用AND(現在)() - INTERVAL 600,但這會影響停止數字的總和。

結果我就從上面的

Mike 202 
tom 22 
fred 78 

鮑勃不包括他最近一次入境不夠新,它的一歲!邁克雖然有幾個舊條目是有效的,因爲他最近有一個條目 - 但關鍵是,它仍然將他的全部「數字」加起來,而不僅僅是那些具有時間段的數字。

繼續在單個查詢中找到您的頭!並且謝謝

andy。

回答

1

你想要一個HAVING條款:

select name, sum(number), max(timestamp_column) 
from table 
group by name 
HAVING max(timestamp_column) > now() - INTERVAL 600; 
+0

我會建議使用兩個查詢的解決方案結合在一起......不知道我是如何忘記HAVING條款的。順便說一句,我不相信你需要在選擇列表中包含timestamp_column,除非它需要顯示。 – 2010-07-30 21:49:35

+0

是的,這看起來像正確答案vs我的懶惰版本:) – 2010-07-30 21:51:53

+0

djacobsen:對於許多RDBMS,你不知道。對於OP的mysql,你不需要。對於SQL標準,你這樣做,所以我把它包括在內是便攜和安全的。 – tpdi 2010-07-30 21:58:25

0

安德魯 - 教育的精神,我不打算以顯示查詢(實際上,我懶惰,但不要告訴任何人): )。

基本上,你必須在你的主要標準選擇內做一個子選擇。在僞代碼,這將是:

select person, total as (select sum(number) from table1 t2 where t2.person=t1.person) 
from table1 t1 where timestamp > now() - INTERVAL 600 

,將炸燬,但你要點... 吉姆

相關問題