MySQL如何实现按时间统计数据
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了MySQL如何实现按时间统计数据,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。在做数据库的统计时,经常会需要根据年、月、
千家信息网最后更新 2026年11月03日MySQL如何实现按时间统计数据
这篇文章主要介绍了MySQL如何实现按时间统计数据,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
在做数据库的统计时,经常会需要根据年、月、日来统计数据,然后配合echarts来制作可视化效果。
数据库:MySQL
思路
按照时间维度进行统计的前提是需要数据库中有保留时间信息,建议是使用
MySQL自带的datetime类型来记录时间。
`timestamp` datetime DEFAULT NULL,
在MySQL中对于时间日期的处理的函数主要是
DATE_FORMAT(date,format)。可用的参数如下
| 格式 | 描述 |
|---|---|
| %a | 缩写星期名 |
| %b | 缩写月名 |
| %c | 月,数值 |
| %D | 带有英文前缀的月中的天 |
| %d | 月的天,数值(00-31) |
| %e | 月的天,数值(0-31) |
| %f | 微秒 |
| %H | 小时 (00-23) |
| %h | 小时 (01-12) |
| %I | 小时 (01-12) |
| %i | 分钟,数值(00-59) |
| %j | 年的天 (001-366) |
| %k | 小时 (0-23) |
| %l | 小时 (1-12) |
| %M | 月名 |
| %m | 月,数值(00-12) |
| %p | AM 或 PM |
| %r | 时间,12-小时(hh:mm:ss AM 或 PM) |
| %S | 秒(00-59) |
| %s | 秒(00-59) |
| %T | 时间, 24-小时 (hh:mm:ss) |
| %U | 周 (00-53) 星期日是一周的第一天 |
| %u | 周 (00-53) 星期一是一周的第一天 |
| %V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
| %v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
| %W | 星期名 |
| %w | 周的天 (0=星期日, 6=星期六) |
| %X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
| %x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
| %Y | 年,4 位 |
| %y | 年,2 位 |
注:当涉及到按日统计是,需要使用%j,而如果使用%d, %e, %w的话,那么不同月份/周里的相同值会统计在一起。
涉及到获取当前时间,则可以通过
now()或者sysdate()来获取。
SELECT SYSDATE() FROM DUAL;SELECT NOW() FROM DUAL;
按照实际需求使用
group by查询即可。
结论
需统计的表结构如下:
CREATE TABLE `apilog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(64) DEFAULT NULL, `action` varchar(64) DEFAULT NULL, `params` text, `result` text, `timestamp` datetime DEFAULT NULL, PRIMARY KEY (`id`))
统计时间范围内不同分类
action的数量# 当日SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%j') = DATE_FORMAT(now(),'%j') ORDER BY count desc;# 当周SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%u') = DATE_FORMAT(now(),'%u') ORDER BY count desc;# 当月SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%m') = DATE_FORMAT(now(),'%m') ORDER BY count desc;# 当年SELECT action, COUNT(id) count FROM apilog WHERE DATE_FORMAT(`timestamp`,'%Y') = DATE_FORMAT(now(),'%Y') ORDER BY count desc;
统计某分类
action的时间维度数量# 按日SELECT action, DATE_FORMAT(`timestamp`,'%j'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%j')# 按周SELECT action, DATE_FORMAT(`timestamp`,'%u'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%u')# 按月SELECT action, DATE_FORMAT(`timestamp`,'%m'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%m')# 按年SELECT action, DATE_FORMAT(`timestamp`,'%Y'), COUNT(id) count FROM apilog WHERE action = 'xxx' GROUP BY DATE_FORMAT(`timestamp`,'%Y')
同时按
action和时间维度统计# 按日SELECT action, DATE_FORMAT(`timestamp`,'%j'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%j')# 按周SELECT action, DATE_FORMAT(`timestamp`,'%u'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%u')# 按月SELECT action, DATE_FORMAT(`timestamp`,'%m'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%m')# 按年SELECT action, DATE_FORMAT(`timestamp`,'%Y'), COUNT(id) count FROM apilog GROUP BY action, DATE_FORMAT(`timestamp`,'%Y')
感谢你能够认真阅读完这篇文章,希望小编分享MySQL如何实现按时间统计数据内容对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,遇到问题就找,详细的解决方法等着你来学习!
时间
统计
星期
小时
数据
数值
统计数据
数据库
篇文章
维度
不同
一是一
同时
数量
缩写
分类
相同
价值
内容
函数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中关村互联网 科技集团
互联网科技卖菜
科技信息互联网
与互联网科技公司
浩特互联网科技
丰台科技园 互联网
互联网金融 科技创新
上海万想互联网科技
滨湖区互联网智能科技产品供应
互联网科技产品
互联网科技博主是什么意思
新兴科技互联网创新大赛颁奖典礼
青海科技产业互联网发展
科技互联网海报
广州千川互联网科技有限公司
风投北京互联网科技
卡尔迅互联网科技有限公司
广东鹅鹅鹅互联网科技有限公司
安徽零酒互联网科技有限公司
瑞安市蟠桃会互联网科技有限公司
科技平台互联网
合肥互联网科技公司
智慧科技互联网
丰台科技园 互联网
华中科技有哪些互联网大佬
坤平互联网科技
互联网科技和法律行业
上海互联网科技公司ppt
抖集互联网科技技术咨询
前海云享互联网科技