网站建设捌金手指下拉七,网站免费源码不用下载,网页设计十大品牌,郑州鹏之信网络科技有限公司处理数据的时候#xff0c;往往需要回溯历史#xff0c;比如给用户分群后计算每个群体的用户数趋势#xff0c;那么就需要计算截止到每一天的各个群体的用户数量#xff0c;这个时候我们就需要创建存储过程#xff0c;并且在存储过程中增加循环的功能#xff0c;以此来实…处理数据的时候往往需要回溯历史比如给用户分群后计算每个群体的用户数趋势那么就需要计算截止到每一天的各个群体的用户数量这个时候我们就需要创建存储过程并且在存储过程中增加循环的功能以此来实现上述回溯的需求。
第一步先创建一个初始表用于循环过程中插入数据
-- 创建表之前先判断有没有这个表存在有的话就删掉
DROP TABLE IF EXISTS test_table;-- 创建表
CREATE TABLE test_table (id INT (11) NOT NULL AUTO_INCREMENT,time VARCHAR (255) DEFAULT 2021-12-22 11:22:32,PRIMARY KEY (id),UNIQUE KEY time (time)
) ENGINE INNODB AUTO_INCREMENT 11 DEFAULT CHARSET utf8;-- 创建完先看一眼这个表
desc test_table;
第二步创建存储过程
-- 定义结束符为 $$
delimiter $$-- 创建存储过程之前先判断有没有这个存储过程存在有的话就删掉防止报错
drop procedure if exists insertdata;
create procedure insertdata( a INT) -- 创建新的存储过程a是参数整数begindeclare i int default 0; -- 变量声明i while i a do -- 判断条件满足条件则执行下面的循环不满足条件则跳过结束循环-- 插入数据set t DATE_ADD(DATE(2021-12-20), INTERVAL - i DAY); -- 从2021-12-20往前回溯a天INSERT INTO test_table (id,time) VALUE (i , t) ; set i i 1; -- 每执行一次循环之后 i 1 end while; -- 结束循环end $$ -- 结束存储过程第三步调用循环过程
-- 调用存储过程
call insertdata(10); -- 设置a为10也就是从固定日期往前回溯10天的数据-- 查看存储过程执行之后的数据
select * from test_table; 番外有时候会出现报错Commands out of sync; you cant run this command now
这个报错和循环过程没有关系这个窗口失效了重新打开一个窗口再查询就正常了