mysql 存储过程

要求是取出前七周中每一周的总额(只能通过一周最后一天的数据减去该周第一天的数据得到),
使用了以下的存储过程

BEGIN
    DECLARE i int;
    DECLARE theDate1 varchar(20);
    DECLARE theDate2 varchar(20);
    DECLARE theFirstTotalPower double;
    DECLARE theLastTotalPower double;

    SET i = 1;
    SET theDate1 = DATE_FORMAT(DATE_SUB(curdate()-WEEKDAY(curdate()), INTERVAL 6 WEEK), "%Y-%m-%d");
    SET theDate2 = DATE_FORMAT(DATE_SUB(curdate()-WEEKDAY(curdate()) + 6, INTERVAL 6 WEEK), "%Y-%m-%d");
    SET theFirstTotalPower = 0;
    SET theLastTotalPower = 0;

    DROP TABLE IF EXISTS tb_temp1;
    CREATE TEMPORARY TABLE tb_temp1(
        `tmp_Id` int(11)  NOT NULL AUTO_INCREMENT primary key, 
        `totalpower` double,
        `thetime` int
    ) ENGINE = MYISAM DEFAULT charset = utf8; 

    WHILE (i < 8) DO
        SET theFirstTotalPower = (SELECT `data`.total_power FROM `data` WHERE date = theDate1 ORDER BY `data`.time ASC LIMIT 1);
        SET theLastTotalPower = (SELECT `data`.total_power FROM `data` WHERE date = theDate2 ORDER BY `data`.time DESC LIMIT 1);
        SET i = i + 1;
        SET theDate1 = DATE_FORMAT(DATE_SUB(curdate()-WEEKDAY(curdate()), INTERVAL 7-i WEEK), "%Y-%m-%d");
        SET theDate2 = DATE_FORMAT(DATE_SUB(curdate()-WEEKDAY(curdate()) + 6, INTERVAL 7-i WEEK), "%Y-%m-%d");

        INSERT INTO tb_temp1 VALUES(0, FORMAT(theLastTotalPower - theFirstTotalPower, 2), week(theDate1, 1)-1);
    END WHILE;
        
    SELECT * FROM tb_temp1;
    drop table tb_temp1;
END

得到的结果如下:

clipboard.png

怎么取出来的数据是空呢?要怎么修改才能得到要求..

阅读 1.8k
1 个回答

这个是可以正常运行的..是自己测试数据的问题..

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题