MySQL如何实现按时间统计数据
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍了MySQL如何实现按时间统计数据,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。在做数据库的统计时,经常会需要根据年、月、
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
洛阳ios软件开发
软件开发行业的毛利率
重庆苹果软件开发需要多少钱
微信登录显示服务器异常
风景画小说软件开发
白话网络安全 pdf 下载
分布式数据库技术细节
高防云服务器代理
如何创建新的数据库实例
邮件服务器图片大全
网络安全的报告
江门专业软件开发批发价格
果洛网络技术是什么
溪谷软件开发
软件开发无形资产摊销150
戴尔r970服务器配置
无锡进口刀片服务器厂家
Y数据库
邮箱服务器 server
云南巨邦网络技术有限
互联网+改革开放+科技
万宁天气预报软件开发
监利天气预报软件开发
中外专利数据库的检索与利用
数据库稀释是什么意思
大数据网络技术介绍
绍兴java软件开发项目
无线路由器网络安全设置
华为软件开发是做什么的
ocp数据库认证工程师