mySql对一列进行求和,并在最后10分钟内仅返回带有和条目的条目

时间:2010-07-30 21:43:20

标签: datetime mysql subquery sum

下面是一张表,查询运行的时间,即现在是2010-07-30 22:41:14

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 timestamp> now() - INTERVAL 600,这会影响停止数字的全部总和。

我将从上面得到的结果

Mike 202
tom  22
fred 78
鲍勃不包括在内,他的最新入门不是最近的一年了!迈克虽然他有几个旧条目是有效的,因为他最近有一个条目 - 但关键,它仍然加起来他的完整'数字'而不仅仅是那些有时间段的。

继续在单个查询中绕过那个!并谢谢

和j。

2 个答案:

答案 0 :(得分:1)

您需要HAVING子句:

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

答案 1 :(得分:0)

安德鲁 - 根据教育的精神,我不会展示查询(实际上,我是懒惰但不告诉任何人):)。

基本上,你必须在主要标准选择中做一个子选择。在psuedo代码中它将是:

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

会爆炸,但你得到了主旨...... 吉姆