开发后台每月结算运营各项数据,随着时间推移,数据库中数据量越来越大,不久前请角色和合服已经删除了大部分冷数据。但是开发的累计注册统计数据仍然是 count(*) 来计算,当月累计注册= 上月累计注册 + 当月新增用户。
编写存储过程
drop PROCEDURE IF EXISTS `month_operate_data_proc`; DELIMITER ;; CREATE PROCEDURE month_operate_data_proc() BEGIN declare v_before_last_registers int unsigned; declare v_last_newplayers int unsigned; declare v_last_month varchar(20); declare v_before_last_month varchar(20); DECLARE done INT DEFAULT FALSE; set v_before_last_month = DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 2 MONTH),'%Y-%m'); /* 获取上上个月年月,应为结算时间已是次月 */ set v_last_month = DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m'); /*获取上个月年月*/ select registerplayer from month_operate_data where monthTime = v_before_last_month into v_before_last_registers; select newRegisterplayer from month_operate_data where monthTime = v_last_month into v_last_newplayers; update month_operate_data set registerplayer = v_before_last_registers + v_last_newplayers where monthTime = v_last_month; END;; delimiter ;
3、创建定时器,每个月1日上午9点30分,上班时执行。
CREATE DEFINER=`root`@`localhost` EVENT `month_operate_data` ON SCHEDULE EVERY 1 MONTH STARTS '2018-03-01 09:30:00' ON COMPLETION PRESERVE ENABLE DO call lwol.month_operate_data_proc