Mysql存储过程

时间:2016-12-12 05:11:22

标签: mysql loops stored-procedures while-loop

您好我正在尝试在存储过程中运行一个循环,其中我从基于date(curr_date)的select查询中获取值的总和。 我需要在我的选择query(curr_date)中循环日期列。 我面临的问题是,当我运行while循环时,它只从数据库中获取日期的第一个条目。

我的Mysql存储过程如下:

CREATE PROCEDURE `paf_calculation`(out avg_sum1 float(15,3))
BEGIN
    DECLARE day_count int;
    DECLARE extra_days int;
    DECLARE lookup_weeks int;
    DECLARE week_days INT;
    DECLARE count decimal;
    DECLARE datapoints int;
    DECLARE start_date date;
    DECLARE previous_days date; 
    DECLARE sum_extra_days float(15,3);
    DECLARE roid int;
    DECLARE historylookup_weeks int;    
    DECLARE avg_sum float;
    DECLARE i int;
    DECLARE curr_date date;

    set i = 0;
    SET WEEK_DAYS = 7;

    Set count = 0.5;



    select datediff('2016-10-10','2016-10-7') into historylookup_weeks;


    /** counts the number of days from the current week start and end days */
    select datediff('2016-10-10','2016-10-7') into day_count;

    /**No of extra days if the current week is more or less than 7 */
    SET extra_days = day_count - WEEK_DAYS;

    /**calculates the date 56 days from the current start week date */
    select date_sub('2016-10-17',interval 56 day) into previous_days ;

    /**calculates the datapoints*/ 
    set avg_sum1=0;

    Set datapoints = day_count * lookup_weeks; 
    set i = 0;

    set curr_date = '2016-10-08'; 


    while curr_date < '2016-10-17' do
    SELECT SUM(actual_volume) into avg_sum FROM volume_trackers WHERE (date_inserted between '2016-08-23' AND '2016-10-17') AND (day_of_week in (dayofweek(curr_date))) and (ro_id=13);
    set curr_date=date_add(curr_date,interval 1 day);
    set avg_sum1=avg_sum+avg_sum1;
    END WHILE;  

END

1 个答案:

答案 0 :(得分:0)

您的查询似乎循环编码但我会修改sum_avg1计算以允许返回平均值的空值

set avg_sum1=coalesce(avg_sum,0) + avg_sum1;
相关问题