- DELIMITER $
- DROP PROCEDURE IF EXISTS `stat` $
- CREATE DEFINER=`liulive`@`%` PROCEDURE `stat`(startDate VARCHAR(14), endDate VARCHAR(14))
- BEGIN
- /*声明变量*/
- DECLARE total INT DEFAULT 0;
- DECLARE dat DATE DEFAULT NULL;
- DECLARE quals INT DEFAULT 0;
- DECLARE scheds INT DEFAULT 0;
- DECLARE shows INT DEFAULT 0;
- DECLARE kepts INT DEFAULT 0;
- DECLARE accepts INT DEFAULT 0;
- DECLARE _time VARCHAR(14) DEFAULT NULL;
- DECLARE assess VARCHAR(40) DEFAULT NULL;
- DECLARE offic VARCHAR(60) DEFAULT NULL;
- DECLARE recrui VARCHAR(60) DEFAULT NULL;
- DECLARE ma VARCHAR(60) DEFAULT NULL;
- DECLARE CNT INT DEFAULT 0;
- DECLARE _cursor_flag TINYINT(1) DEFAULT 0;
- /*定义光标*/
- DECLARE totalCalls CURSOR FOR Select count(flow_step) as total, DATE(operate_date) as dat, office, recruit, main from v_student where DATE(operate_date) >= DATE(startDate) And DATE(operate_date) <= DATE(endDate) group by DATE(operate_date), office, recruit, main order by DATE(operate_date);
- DECLARE qualCalls CURSOR FOR Select count(flow_step) as qual, DATE(operate_date) as dat, office, recruit, main from v_student where flow_step <> 'NQ' And DATE(operate_date) >= DATE(startDate) and DATE(operate_date) <= DATE(endDate) group by DATE(operate_date), office, recruit, main order by DATE(operate_date);
- DECLARE schedCalls CURSOR FOR Select count(flow_step) as sched, DATE(operate_date) as dat, office, recruit, main from v_student where flow_step = 'Assessment Scheduled' And DATE(operate_date) >= DATE(startDate) and DATE(operate_date) <= DATE(endDate) group by DATE(operate_date), office, recruit, main order by DATE(operate_date);
- DECLARE totalSched CURSOR FOR Select count(flow_step) as sched, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main from v_student where flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);
- DECLARE showSched CURSOR FOR Select count(shows) as shows, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main from v_student where shows is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);
- DECLARE qualSched CURSOR FOR Select count(qual) as quals, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main from v_student where qual is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);
- DECLARE keptSched CURSOR FOR Select count(kept) as kepts, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main from v_student where kept is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);
- DECLARE acceptSched CURSOR FOR Select count(accept) as accepts, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main from v_student where accept is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);
- nbsp;
- /* 定义光标结束标志 */
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET _cursor_flag = -1;
- DELETE FROM STAT_TEMP;
- COMMIT;
- OPEN totalCalls; /*打开光标*/
- LOOP_totalCalls:LOOP /* 循环声明 */
- FETCH totalCalls INTO total, dat, offic, recrui, ma;
- IF _cursor_flag = -1 then
- LEAVE LOOP_totalCalls;
- END IF;
- insert into STAT_TEMP(DATE_, TOTAL_CALLS, OFFICE, RECRUIT, MAIN) values(dat, total, offic, recrui, ma);
- END LOOP;
- COMMIT;
- CLOSE totalCalls; /* 关闭光标 */
- SET _cursor_flag = 1; /* 重置光标结束标志 */
- OPEN qualCalls;
- LOOP_qualCalls:LOOP
- FETCH qualCalls INTO quals, dat, offic, recrui, ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_qualCalls;
- end if;
- SELECT COUNT(*) INTO CNT FROM STAT_TEMP WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;
- IF CNT > 0 THEN
- UPDATE STAT_TEMP SET QUAL_CALLS=quals WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;
- SET CNT = 0;
- ELSE
- insert into STAT_TEMP (DATE_, QUAL_CALLS, OFFICE, RECRUIT, MAIN) values(dat, quals, offic, recrui, ma);
- END IF;
- END LOOP;
- COMMIT;
- CLOSE qualCalls;
- SET _cursor_flag = 1;
- OPEN schedCalls;
- LOOP_schedCalls:LOOP
- FETCH schedCalls INTO scheds,dat,offic,recrui,ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_schedCalls;
- end if;
- SELECT COUNT(*) INTO CNT FROM STAT_TEMP WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;
- IF CNT > 0 THEN
- UPDATE STAT_TEMP SET SCHED_CALLS=scheds WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;
- SET CNT = 0;
- ELSE
- insert into STAT_TEMP(DATE_, SCHED_CALLS, OFFICE, RECRUIT, MAIN) values(dat, scheds, offic, recrui, ma);
- END IF;
- END LOOP;
- COMMIT;
- CLOSE schedCalls;
- SET _cursor_flag = 1;
- OPEN totalSched;
- LOOP_totalSched:LOOP
- FETCH totalSched INTO scheds, _time, dat, assess, offic, recrui, ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_totalSched;
- end if;
- select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- if CNT > 0 then
- update STAT_TEMP set SCHED=scheds WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- SET CNT = 0;
- else
- insert into STAT_TEMP(DATE_, SCHED, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, scheds, assess, offic, recrui, ma);
- end if;
- END LOOP;
- COMMIT;
- CLOSE totalSched;
- SET _cursor_flag = 1;
- OPEN showSched;
- LOOP_showSched:LOOP
- FETCH showSched INTO shows, _time, dat, assess,offic,recrui,ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_showSched;
- end if;
- select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- if CNT > 0 then
- update STAT_TEMP set SHOWS=shows WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- SET CNT = 0;
- else
- insert into STAT_TEMP(DATE_, SHOWS, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, scheds, assess, offic, recrui, ma);
- end if;
- END LOOP;
- COMMIT;
- CLOSE showSched;
- SET _cursor_flag = 1;
- OPEN qualSched;
- LOOP_qualSched:LOOP
- FETCH qualSched INTO quals, _time, dat, assess,offic,recrui,ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_qualSched;
- end if;
- select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- if CNT > 0 then
- update STAT_TEMP set QUAL=quals WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- SET CNT = 0;
- else
- insert into STAT_TEMP(DATE_, QUAL, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, quals, assess, offic, recrui, ma);
- end if;
- END LOOP;
- COMMIT;
- CLOSE qualSched;
- SET _cursor_flag = 1;
- OPEN keptSched;
- LOOP_keptSched:LOOP
- FETCH keptSched INTO kepts, _time, dat, assess, offic, recrui, ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_keptSched;
- end if;
- select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- if CNT > 0 then
- update STAT_TEMP set KEPT=kepts WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- SET CNT = 0;
- else
- insert into STAT_TEMP(DATE_, KEPT, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, kepts, assess, offic, recrui, ma);
- end if;
- END LOOP;
- COMMIT;
- CLOSE keptSched;
- SET _cursor_flag = 1;
- OPEN acceptSched;
- LOOP_acceptSched:LOOP
- FETCH acceptSched INTO kepts, _time, dat, assess, offic, recrui, ma;
- if _cursor_flag = -1 then
- LEAVE LOOP_acceptSched;
- end if;
- select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- if CNT > 0 then
- update STAT_TEMP set KEPT=kepts WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;
- SET CNT = 0;
- else
- insert into STAT_TEMP(DATE_, KEPT, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, kepts, assess, offic, recrui, ma);
- end if;
- END LOOP;
- COMMIT;
- CLOSE acceptSched;
- END $
- DELIMITER ;