MySQL 统计某张表过去12个月的数据(包括本月)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL 统计某张表过去12个月的数据(包括本月),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2749字,纯文字阅读大概需要4分钟。
内容图文
![MySQL 统计某张表过去12个月的数据(包括本月)](/upload/InfoBanner/zyjiaocheng/869/33003a0812994e56bfb52d8c082e792e.jpg)
现在有一张 x02人员 表。
CREATE TABLE `x02人员` (
`人员ID` varchar(32) NOT NULL,
`姓名` varchar(20) DEFAULT NULL,
`出生日期` date DEFAULT NULL,
`移动电话` varchar(11) DEFAULT NULL
`创建时间` datetime DEFAULT CURRENT_TIMESTAMP,
`最近修改时间` datetime DEFAULT NULL,
`数据状态` varchar(2) DEFAULT NULL,
PRIMARY KEY (`人员ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
现在欲统计过去12个月的数据,如现在这个月是2020年12月,那么我们需要统计从2020年12月到2020年1月的数据情况。而这12个月中,如果这个月没有数据的,则统计为0。
1、获取12个月到现在的数据
select * from x02人员 t where DATE_FORMAT(t.创建时间,'%Y-%m')
> DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m');
2、统计在过去12个月中每个月数据状态等于1的数据之和。
select DATE_FORMAT(t.创建时间,'%Y-%m') month, count(t.人员ID) count from x02人员 t
where t.数据状态='1' AND DATE_FORMAT(创建时间,'%Y-%m')>
DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m')
group by month;
这时候可能会发现,原始数据中只有几个月的数据,还有其它剩余几个月按要求应该是显示为0的。
3、用一个笨点的方法获取过去12个月所有的月份。
创建一个查找过去12个月的视图,当然这里你也可以使用存储过程遍历地把12个月插入到一个临时表中,代码会更优雅一点。
drop view if exists past_12_month_view;
CREATE VIEW `past_12_month_view` AS
SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 2 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 3 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 4 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 5 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 6 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 7 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 8 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 9 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 10 MONTH), '%Y-%m') AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 11 MONTH), '%Y-%m') AS `month`
;
查看12个月的显示情况:
select t.month from past_12_month_view t group by t.month;
4、最后,把上述 3 的12个月的显示数据与 2 的 查询结果关联查询
SELECT
v.month, ifnull(b.count, 0) count
FROM past_12_month_view v LEFT JOIN
(
SELECT
DATE_FORMAT(t.创建时间, '%Y-%m') month,
count(t.人员ID) count
FROM
`x02人员` t
WHERE DATE_FORMAT(t.创建时间, '%Y-%m') > DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 12 MONTH),'%Y-%m')
GROUP BY month
ORDER BY month desc
limit 12
) b ON v.month = b.month
GROUP BY v.month
ORDER BY v.month DESC
;
参考原文:https://developer.aliyun.com/article/28732
以上。
内容总结
以上是互联网集市为您收集整理的MySQL 统计某张表过去12个月的数据(包括本月)全部内容,希望文章能够帮你解决MySQL 统计某张表过去12个月的数据(包括本月)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。