mysql不同时间粒度下的分组统计
1、测试表数据如下:
2、MySQL按天分组数据
DATE() 函数返回日期或日期/时间表达式的日期部分。如下所示:
可以如下Sql展示:
SELECT DATE(time) AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
结果如下所示:
3、按分钟分组如下所示:
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
注:完整的年月日时分秒格式如:%Y-%m-%d %H:%i:%s
测试输出当前时间如下:
Sql语句可以如下书写:
SELECT DATE_FORMAT(time, '%Y-%m-%d %H') AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
输出结果如下:
因为DATE_FORMAT是格式化函数,所以也可以这样写
SELECT DATE_FORMAT(time, '%Y-%m-%d %H:00:00') AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
4、分别以年、月、分、秒分组
年
SELECT DATE_FORMAT(time, '%Y') AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
月:
SELECT DATE_FORMAT(time, '%Y-%m') AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
分:
SELECT DATE_FORMAT(time, '%Y-%m-%d %H:%i') AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
秒:
SELECT DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') AS date, COUNT(*) AS num FROM group_time_test GROUP BY date ORDER BY date desc ;
5、带计算类的时间统计
需要用到下列方法,依次为年、月、日、时、分、秒、星期
select year(NOW()); select MONTH(NOW()); select DAY(NOW()); select HOUR(NOW()); select MINUTE(NOW()); select SECOND(NOW()); select WEEK(NOW());
5.1 按半小时分组统计
Sql与结果如下:
SELECT DATE_FORMAT( concat( date( time ), ' ', HOUR ( time ), ':', floor( MINUTE ( time ) / 30 ) * 30 ), '%Y-%m-%d %H:%i' ) AS date ,count(*) FROM group_time_test GROUP BY date ;
其他不一一举例
参考资料:https://blog.csdn.net/u010946448/article/details/83752984