Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于时间戳按小时聚合数据_Mysql - Fatal编程技术网

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
,我会添加它,看看我能学到什么!再次感谢。请详细说明“无法按预期工作”。