CREATE DEFINER=`root`@`%` PROCEDURE `proc_get_penaltyMonthDealNoDeal`(IN `yeartmp` int) BEGIN -- ============================================= -- Author: 作者 -- Create date: 创建时间 -- Description: 描述 -- ============================================= declare i int default 0; declare monthtmp varchar(2); declare yearFirstDay varchar(150) default NULL; declare yearLastDay varchar(150) default null; declare totalnumcount int default 0;-- 总的违章数量 declare dealnumcount int default 0; -- 已处理违章数量 set i = 1; -- 标量为0第一个月 -- 创建车辆录入类型临时表 drop table if exists tmp1; create TEMPORARY table tmp1 ( `month` int(2), `totalnum` int(10), -- 总的违章数量 `dealnum` int(10) -- 已处理违章数量 ); -- 循环查询12个月的数据 while i <= 12 do set monthtmp=i; set totalnumcount=0,dealnumcount=0; if (LENGTH(monthtmp) = 1) then set monthtmp='0'+monthtmp; end if; -- select yeartmp,monthtmp; -- 取得某年某月的第一天 set yearFirstDay=concat(yeartmp,'-' , monthtmp,'-01 00:00:00'); -- set yearFirstDay= str_to_date(CONCAT(date_format(yeartmp+'-'+monthtmp,'%Y-%m-%d') ,' 15:11:11' ),'%Y-%m-%d %T') -- select yearFirstDay; -- 取得某年某月的最后一天 set yearLastDay=concat(last_day(yearFirstDay), ' 23:59:59'); -- 取得总的违章数量 set totalnumcount=(select COUNT(*) from jt_penalty where isundo <> 0 and illegaltime <= date_format(yearLastDay ,'%Y-%m-%d %T')) ; -- 取得至今这个月已处理违章数量 set dealnumcount=( select COUNT(*) from jt_penalty where isundo <> 0 and illegaltime <= date_format(yearLastDay ,'%Y-%m-%d %T') and isOver in('1','2','3','4')); -- 插入临时表 insert tmp1 values(i,totalnumcount,dealnumcount); -- 标量+1 set i=i+1; END WHILE; -- select*from tmp1; select `month`,`totalnum` as `count` ,`dealnum` `count1` from tmp1; END
注意避坑:变量名不能和表中的字段名称定义一样,否则查询结果会是变量值最后一次的结果。
如此文对你有帮助,请打赏作者或推荐此文,在此多谢了~