mysql - How to run this query inside Stored Procedure when session variables are used -
i have found query calculate medians
@myvar:=0; @rownum:=0; select result.readdate, avg(total_gallons) total_gallons (select middle_rows.readdate, numerated_rows.rownum, numerated_rows.total_gallons (select if(@myvar = readdate, @rownum := @rownum + 1, @rownum := 0) rownum, @myvar := readdate readdate_alias, total_gallons _temp_total_gallons order readdate, total_gallons) numerated_rows, (select readdate, count(*) / 2 median _temp_total_gallons group readdate) middle_rows numerated_rows.rownum between ( middle_rows.median - if(median = round(median), 1, 0) - 0.5 ) , ( middle_rows.median - if(median = round(median), 0, 0.5) ) , numerated_rows.readdate_alias = middle_rows.readdate) result group readdate
as see uses @myvar
, @rownum
session variables select if(@myvar = readdate, @rownum := @rownum + 1, @rownum := 0)
the problem can't run inside stored procedure because @myvar:=0
syntax unknown, , must reference/set inside-select runtime.
how rewrite above query used in stored procedure?
sample data test , query can found @ https://gist.github.com/948250
a second set of data test here https://gist.github.com/25b991396d0dd6968b7e
use
set @myvar := 0;
inside sp assign value:
delimiter $$ create procedure prc_median() begin set @myvar:=0; set @rownum:=0; select result.readdate, avg(total_gallons) total_gallons (select middle_rows.readdate, numerated_rows.rownum, numerated_rows.total_gallons (select if(@myvar = readdate, @rownum := @rownum + 1, @rownum := 0) rownum, @myvar := readdate readdate_alias, total_gallons _temp_total_gallons order readdate, total_gallons) numerated_rows, (select readdate, count(*) / 2 median _temp_total_gallons group readdate) middle_rows numerated_rows.rownum between ( middle_rows.median - if(median = round(median), 1, 0) - 0.5 ) , ( middle_rows.median - if(median = round(median), 0, 0.5) ) , numerated_rows.readdate_alias = middle_rows.readdate) result group readdate; end; $$
Comments
Post a Comment