问题描述
|
我被困在如何从上一个插入语句中获取递增的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将中断。无论如何,最好以显式方式命名列。
如果您需要有关光标的帮助,请发布。