MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1325|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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$$

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-3 08:46 , Processed in 0.066843 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表