2016-12-12 7 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

조회에 루프 보인다하지만 난 널 (null)을 허용하는 sum_avg1 계산을 개정 할 합계에게 당신이

set avg_sum1=coalesce(avg_sum,0) + avg_sum1;