如何解决Mysql存储过程获取插入后的总数
| 我被困在如何从上一个插入语句中获取递增的ID以及最大,最小,总和或计数。 谁能建议我如何以简单的方式做到这一点?CREATE PROCEDURE INSERTRECORD()
BEGIN
INSERT INTO tb_normalized_data_20110615
SELECT * FROM tb_normalized_data WHERE
date_added BETWEEN \'2011-06-15 01:10:00\' and \'2011-06-15 01:19:59\'
-- Stuck here how to get the value for(x_min_id,x_max_id,x_min_date,-- x_max_date) from the statement above without querying again?
INSERT INTO tb_backup_tracker(min_id,max_id,min_date,max_date)
VALUES(x_min_id,x_max_date);
END;
解决方法
我认为您正在寻找游标。基本上,这是它的工作方式:
DECLARE cur CURSOR FOR SELECT * FROM tb_normalized_data WHERE
date_added BETWEEN \'2011-06-15 01:10:00\' and \'2011-06-15 01:19:59\';
DECLARE ID INT;
DECLARE DT DATE;/* Declare all of your columns */
DECLARE MIN_ID INT;
DECLARE MAX_ID INT;
DECLARE MIN_DATE DATE;
DECLARE MAX_DATE DATE;
-- add your other columns here...
BEGIN
OPEN cur;
read_loop: LOOP
FETCH cur INTO ID,DT /* Fetch into all of your columns */;
IF ID < MIN_ID THEN
SET @MIN_ID = ID;
IF ID > MAX_ID THEN
SET @MAX_ID = ID;
END IF;
INSERT INTO tb_normalized_data_20110615 (ID,DATE_ADDED
/*,rest of your columns*/ ) VALUES( /* columns */ );
END LOOP;
INSERT INTO tb_backup_tracker(min_id,max_id,min_date,max_date)
VALUES(min_id,max_date);
CLOSE cur;
, 使用游标循环遍历数据,并在游标循环内部插入并跟踪所需的最小值/最大值。
另外,您的代码很脆弱:避免使用模式“ 2”;如果第二个表添加一列,您的SQL将中断。无论如何,最好以显式方式命名列。
如果您需要有关光标的帮助,请发布。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。