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

 注意避坑:变量名不能和表中的字段名称定义一样,否则查询结果会是变量值最后一次的结果。

如此文对你有帮助,请打赏作者或推荐此文,在此多谢了~

      

原文地址:https://www.cnblogs.com/louby/p/9294773.html