我试图每30分钟对我的时间戳进行分组.
我希望我的结果是这样的:
2016-03-09 00:00:00
2016-03-09 00:30:00
2016-03-09 01:00:00
Run Code Online (Sandbox Code Playgroud)
相反,我的结果如下:
2016-03-09 00:00:23
2016-03-09 00:35:02
2016-03-09 01:00:03
Run Code Online (Sandbox Code Playgroud)
我正在使用的查询就是这个
SELECT timestamp
FROM a.tablename
WHERE name = 'example' AND timestamp LIKE '2016-03-09%'
GROUP BY ROUND(((60/30) * HOUR(timestamp) + FLOOR( MINUTE(timestamp) / 30)));
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到我想要的结果?我已经研究了关于SO的其他答案,而非答案的帮助
这是30分钟间隔分组的基本查询.
SELECT
FROM_UNIXTIME(ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60)) * (30*60)) thirtyHourInterval
FROM tablename
GROUP BY ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60));
Run Code Online (Sandbox Code Playgroud)
注意: ROUND()可能会导致输出错误.请改用以下查询.请看以下示例:
SELECT ROUND(3.7), ROUND(4.2);
Run Code Online (Sandbox Code Playgroud)
结果: 4 4.
两者都在同一部分.对于上述查询也是如此,而timestamp对不同段进行舍入可能属于同一段,从而导致错误输出
[推荐以下查询]
SELECT
FROM_UNIXTIME((UNIX_TIMESTAMP(`timestamp`) DIV (30* 60) ) * (30*60)) thirtyHourInterval
FROM tablename
GROUP BY UNIX_TIMESTAMP(`timestamp`) DIV (30* 60)
Run Code Online (Sandbox Code Playgroud)
或者,您可以采用以下查询.
SELECT
FROM_UNIXTIME(ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60)) * (30*60)) thirtyHourInterval
FROM tablename
GROUP BY ( 4 * HOUR( `timestamp` ) + FLOOR( MINUTE( `timestamp` ) / 30 ));
Run Code Online (Sandbox Code Playgroud)