2014-01-07 113 views
1

我告诉你我在做什么,然后告诉我什么。如何按小时对mysql查询结果进行分组?

现在:

SELECT COUNT(*) as `total`, `date` FROM `Events` GROUP BY HOUR(`date`) 

这回这样的事情:

date  | Count 
1389105597 | 125 

这是我想有什么,但我不知道如何:

date  | Count 
00:01  | 10 
01:02  | 13 
02:03  | 3 
(...) 
23:00  | 30 

回答

3

你日期似乎是一个unix时间戳 - 一个整数,代表自1970年1月1日以来的秒数。他们是不是一个MySQL日期/时间字符串,这是MySQL的大部分日期/时间函数所期望的。

尝试以下操作:

SELECT count(*) AS total, HOUR(FROM_UNIXTIME(`date`)) AS hour 
... 
GROUP BY HOUR(FROM_UNIXTIME(`date`)) 

这会将时间戳转换回本地MySQL的日期/时间值,你可以用它来从提取小时。

+0

你做到了!现在我添加这个:CONCAT(HOUR(FROM_UNIXTIME(date)),':00-',HOUR(FROM_UNIXTIME(date))+ 1,':00')AS Hours',看起来和我想象的完全一样:)关于表现?关于此转换 – user1148875

+0

有一些转换费用。一般来说,最好将日期/时间存储为本地mysql日期和时间值,因为从本地类型转换这些小时/日期/任何转换非常有效。添加from_unixtime转换强制进行每次运行select时的转换,这会导致大型表上的性能下降。 unix时间戳的优点在于它们是简单的整数,如果你不需要从它们中提取日期组件,它们非常节省空间来存储 –

+0

我看到;)也许最好重新考虑这个问题案件 – user1148875

相关问题