2011-11-22 123 views
2

第一件事,为外地我的日期格式是TIMESTAMP选择价值

我有一个包含ID,域,命中,当一个表。

现在,当我将匹配插入到数据库中时,我每隔10分钟就从分析API中抽取数据。所以这个表的内容是

id=1, domain=test.com, hits=930, when=2011-11-22 16:00:22; 

id=2, domain=test2.com, hits=134, when=2011-11-22 16:10:22; 

一旦填满了每10分钟的数据在过去六个小时,我想找到的点击次数为每个域的每个小时 。所以:

由于每10分钟插入一次,每小时会有6行,我如何检索每小时的总点击次数?

如果我想在当天下午1:39拉我的统计数据,我应该能够从1:10 PM,1:20 PM,1:30 PM拉出所有匹配。

我是否需要六个独立的mysql查询,需要当前时间并为每个小时运行它,因为我正在图形中显示它(1小时前,2小时前,3小时前等)或者是否存在更简单的方法来实现这一目标?

请帮我理解,谢谢!

回答

2

你可以尝试

select domain, date_format(when, '%Y-%m-%d %I%p') hour, sum(hits) 
from table group by domain, hour 

编辑:我改变了格式从%H 24小时制%I%p 12小时制AM/PM,因为它看起来像这就是你想要的。

EDIT2:如果只有你想要的最后六个小时,按分组多少小时前命中了,你可能会与(加DATE_FORMAT到组通过整整一个小时)

select domain, hour(timediff(date_format(now(), '%Y-%m-%d %H'), 
    date_format(when, '%Y-%m-%d %H'))) hours, sum(hits) 
from table 
where hours < 7 
group by domain, hours 
+0

谢谢更好您!这似乎是正确的做法,这是否会每隔一小时显示一次?无论如何要限制到最后6个小时? –

+0

@迈克尔:我的荣幸。第一个会给你ISO日期和12小时小时,但不限制任何东西。第二个查询将只给你最后6小时和组在哪个小时出现。 – flesk

+0

我忘了提及,命中保持不变,所以对于id = 1,命中= 450 id = 2,命中= 520所以从id 1 => 2(10分钟),10分钟内有70次点击。这将如何完成? –