2016-12-12 3 views
0

こんにちは私はストアドプロシージャのループを実行しようとしていますが、私はdate(curr_date)に基づいて選択クエリからの値の合計を取得します。 私の選択でquery(curr_date)の日付列をループする必要があります。 私が直面している問題は、whileループを実行すると、データベースからの日付の最初のエントリのみが取得されることです。次のようにMysqlストアドプロシージャ

私の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 
+0

を返さwhileのテストの直前にcurr_dateを '2016-10-08'に設定して、同じ日付のテストをしますか? –

答えて

0

が、私はヌル可能にするためにsum_avg1計算を修正するだろうあなたは、平均合計に

set avg_sum1=coalesce(avg_sum,0) + avg_sum1; 
関連する問題