mysql 存储过程
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
注意避坑:变量名不能和表中的字段名称定义一样,否则查询结果会是变量值最后一次的结果。
如此文对你有帮助,请打赏作者或推荐此文,在此多谢了~

文章属于个人工作备忘录,欢迎指正...

浙公网安备 33010602011771号