关于sql存储过程输出结果异常的问题

BEGIN

DECLARE i INT;

set i=1;

while i<2666 DO

IF (YEAR(date(now())-1)=2020 and MONTH(date(now())-1)=02)

THEN INSERT INTO hisdata(analogid,datadate,vmax,minvalue,avgvalue) 

select analogid,date(now())-1,max(calvalue) ,min(calvalue) ,avg(calvalue) from hisanalog_2020_02 where date(savetime)=date(now())-1 and ANALOGID=i;

ELSEIF (YEAR(date(now())-1)=2020 and MONTH(date(now())-1)=03)

THEN INSERT INTO hisdata(analogid,datadate,vmax,minvalue,avgvalue) 

select analogid,date(now())-1,max(calvalue) ,min(calvalue) ,avg(calvalue) from hisanalog_2020_03 where date(savetime)=date(now())-1 and ANALOGID=i;

ELSEIF (YEAR(date(now())-1)=2020 and MONTH(date(now())-1)=04)

THEN INSERT INTO hisdata(analogid,datadate,vmax,minvalue,avgvalue) 

select analogid,date(now())-1,max(calvalue) ,min(calvalue) ,avg(calvalue) from hisanalog_2020_04 where date(savetime)=date(now())-1 and ANALOGID=i;

end IF;


set i=i+1;

end WHILE;


end

以上为一个存储过程的代码,结果输出是analogid为0,不是1开始的,导致无法筛选到可用数据!麻烦大神帮我看看有什么问题!

analogid从1到2665,每天每个id有48行数据,通过此过程将每日数据进行简化汇总!

hotiger 发布于 2020-2-27 09:41 (编辑于 2020-2-27 09:43)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
hotigerLv2见习互助
发布于2020-2-27 14:41

不好意思数据库出了问题,hisanlog_2020_02表内的数据出现异常,date(now())-1的日期内没有数据导致查询失败,现在这个语句是ok的!感谢大佬的关注

最佳回答
0
xiaomiliLv6初级互助
发布于2020-2-27 10:29

你这个连接的是什么数据库

  • hotiger hotiger(提问者) mysql
    2020-02-27 10:37 
  • hotiger hotiger(提问者) 在写这些if语句之前运行都是正常的,感觉应该是if语句运用的问题,是if 和while的嵌套关系问题吗?
    2020-02-27 10:38 
  • xiaomili xiaomili 回复 hotiger(提问者) 你单独查一下 select YEAR(date(now())-1这个,看是不是2020,我觉得是2019
    2020-02-27 10:47 
  • xiaomili xiaomili 回复 hotiger(提问者) 我用sqlserver查是2019,mysql你再试一下
    2020-02-27 10:48 
  • hotiger hotiger(提问者) 回复 xiaomili YEAR(date(now())-1) 您的少一个括号
    2020-02-27 10:58 
  • 0关注人数
  • 292浏览人数
  • 最后回答于:2020-2-27 14:41
    请选择关闭问题的原因
    确定 取消
    返回顶部