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将中断。无论如何,最好以显式方式命名列。 如果您需要有关光标的帮助,请发布。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...