特战队员 发表于 2016-11-28 09:06:21

存储过程最后一行数据的计算结果总是错的,求高手解惑

存储过程的意图:
用游标,对数据库中pri字段计算5行的平均值,并把结果填入当前行的MA5字段中。比如,设当前行为第n行(N>=5),则计算从第(n-4)行到第n行的平均值,并填入第n行的ma5字段中去。
结果:
其他所有行的结果都是正确的,除了最后一行。
请高手帮忙看一下问题出在哪儿?谢谢了!!!
代码如下:
DELIMITER $$
USE `sharestool`$$
DROP PROCEDURE IF EXISTS `getMA`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `getMA`()
BEGIN
DECLARE done INT DEFAULT 0;
##DECLARE myid SMALLINT DEFAULT 1;/*存放上次fetch提取出来的ShareslistID字段值,与光标取出的相应值对比,判断是否进入新股票的数据流处理流程*/
DECLARE sum5 DECIMAL(11,3) DEFAULT 0;
DECLARE mycount SMALLINT DEFAULT 0;/*光标处理的次数*/
DECLARE cur_pri DECIMAL(11,2) DEFAULT 0;/*光标取出的close字段值*/
DECLARE cur_id INT DEFAULT 1;/*光标取出的id字段值*/
DECLARE cur CURSOR FOR SELECT `id`,`pri` FROM `result`;/*定义光标*/
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO cur_id,cur_pri;   
      
SET sum5=sum5 + cur_pri;
SET mycount=mycount+1;

IF mycount> 5 THEN
    SET sum5=sum5-(SELECT `pri` FROM `result` WHERE `id`=cur_id-5);
    UPDATE `result` SET `MA5`=sum5/5 WHERE `id`=cur_id;
   
END IF;
UNTIL done END REPEAT;
CLOSE cur;
   
END$$

页: [1]
查看完整版本: 存储过程最后一行数据的计算结果总是错的,求高手解惑