存储过程developer_count 是根据传入参数searchType 决定是使用那种查询方式,本存储过程中包含的其他的参数是{起始时间:startime,结束时间:endtime}
CREATE PROCEDURE developer_count
(
searchType int,
startTime varchar(64),
endTime varchar(64)
)
BEGIN
/*定义变量天数*/
declare day_num int;
if searchType = 1 then
/*本周数据查询*/
select count(d.acct_id),d.acct_old_time from developer d where1=1 and DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(d.acct_old_time) GROUP BY d.acct_old_time;
end if;
if searchType = 2 then
/*本月数据查询*/
select count(d.acct_id),d.acct_old_time from developer d where1=1 and DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(d.acct_old_time) GROUP BY d.acct_old_time;
end if;
if searchType = 3 then
/*最近三个月数据查询*/
select count(d.acct_id), DATE_FORMAT(d.acct_old_time,'%x年-第%v周') as weeks from developer d where1=1 and DATE_SUB(CURDATE(), INTERVAL 90 DAY) <= date(d.acct_old_time) GROUP BY weeks;
end if;
if searchType = 4 then
/*按月份进行数据统计*/
select datediff(startTime, endTime) into day_num;
if day_num <=7 then
select count(d.acct_id),d.acct_old_time from developer d where1=1 and DATE_SUB(CURDATE(), INTERVAL day_num DAY) <= date(d.acct_old_time) GROUP BY d.acct_old_time;
end if;
if day_num >7&& day_num <= 30 then
select count(d.acct_id),d.acct_old_time from developer d where1=1 and DATE_SUB(CURDATE(), INTERVAL day_num DAY) <= date(d.acct_old_time) GROUP BY d.acct_old_time;
end if;
if day_num >30 && day_num <= 90 then
select count(d.acct_id), DATE_FORMAT(d.acct_old_time,'%x年-第%v周') as weeks from developer d where1=1 and DATE_SUB(CURDATE(), INTERVAL day_num DAY) <= date(d.acct_old_time) GROUP BY weeks;
end if;
end if;
end;
调用存储过程方法
CALL DEVELOPER_COUNT(1,'2016-06-07','2016-06-16'); 调用存储过程
【MySQL 基于存储过程 实现数据统计按日、周、月份统计模板】
推荐阅读
- MyBaties(基础篇)|mysql update语句 无法实现数据库更改操作
- mysql 数据库字段&表名 注释查询
- CTF题|BUUCTF-[极客大挑战 2019]EasySQL 1
- MySQL|MySQL高级-SQL优化步骤
- MySQL|MySQL 用户管理
- 国产数据库前50排名|介绍几个国产数据库
- mysql整数类型 存储范围与使用
- mysql|工作随笔(一)——docker和mysql容器搭建使用问题解决
- 错误|记录(There is no getter for property named ‘null‘ in ‘class)