Mysql 基于时间戳按小时聚合数据
这肯定是一件平常的事,但我被卡住了 我有一些数据可以简化如下:Mysql 基于时间戳按小时聚合数据,mysql,Mysql,这肯定是一件平常的事,但我被卡住了 我有一些数据可以简化如下: id user unixtime ----------------------- 1 dave 1335312057 2 dave 1335312058 3 steve 1335312128 等等 到目前为止,我只需要按天进行聚合,因此我一直在使用: SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(unixtime))) AS time, c
id user unixtime
-----------------------
1 dave 1335312057
2 dave 1335312058
3 steve 1335312128
等等
到目前为止,我只需要按天进行聚合,因此我一直在使用:
SELECT
UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(unixtime))) AS time,
count(c.user) AS count
FROM core c
GROUP BY DATE(FROM_UNIXTIME(unixtime))
我试过使用CONCAT和日期和时间,但不能完全按照预期工作-有什么想法吗
SELECT
DATE(FROM_UNIXTIME(unixtime)) as date,
HOUR(FROM_UNIXTIME(unixtime)) AS hour,
count(c.user) AS count
FROM core c
GROUP BY 1,2
如果要将小时作为unix时间戳,请包装此查询以获取:
SELECT UNIX_TIMESTAMP(DATE_ADD(the_date, INTERVAL the_hour HOUR)), the_count
from (select
DATE(FROM_UNIXTIME(unixtime)) as the_date,
HOUR(FROM_UNIXTIME(unixtime)) as the_hour,
count(c.user) AS the_count
FROM core c
GROUP BY 1,2
) x
注意:使用列名上的前缀以避免保留字出现问题尝试使用
SELECT
UNIX_TIMESTAMP(DATE_ADD(DATE(FROM_UNIXTIME(unixtime)), INTERVAL HOUR(FROM_UNIXTIME(unixtime)) HOUR)) AS TIME,
COUNT(c.user) AS COUNT
FROM core c
GROUP BY DATE(FROM_UNIXTIME(unixtime)), HOUR(FROM_UNIXTIME(unixtime));
希望这能有所帮助……这种情况确实如此,但时间的返回值都四舍五入到最近的一天,而不是一小时。差不多,但我真的希望返回的是unix时间戳-我当然可以用PHP解析这些数据,但如果它作为unix时间戳出现在这里会更好——您会建议使用CONCAT来构建mysql时间戳,然后使用unix_时间戳将其转换为unix时间戳,还是有更好的方法?例如,我正在使用
unix_时间戳(CONCAT(日期(FROM_UNIXTIME(UNIXTIME)),“”,小时(FROM_UNIXTIME(UNIXTIME)),“:00”))进行测试
在SELECT子句中,它是有效的,但对于一些可能更简单的东西来说可能有点复杂。太棒了-非常感谢。顺便问一下,你有没有关于SQL/MySQL更高级但更有用部分的好书/网站?我经常走得很远,但是我不知道你的第二点,也不知道你的1,2
语法。事实上,这个网站的答案中隐藏了很多很好的sql技巧。你可以尝试使用标记的冲浪问题。好主意,我从SO那里学到了很多东西–我最喜欢的标记是mysql
,但不是sql
,我会添加它,看看我能学到什么!再次感谢。请详细说明“无法按预期工作”。