Calculating a Moving Average MySQL?

后端 未结 5 2064
半阙折子戏
半阙折子戏 2020-11-28 15:03

Good Day,

I am using the following code to calculate the 9 Day Moving average.

SELECT SUM(close)
FROM tbl
WHERE date <= \'2002-07-05\'
AND name_id         


        
5条回答
  •  余生分开走
    2020-11-28 15:58

    This query is fast:

    select date, name_id,
    case @i when name_id then @i:=name_id else (@i:=name_id)
    and (@n:=0)
    and (@a0:=0) and (@a1:=0) and (@a2:=0) and (@a3:=0) and (@a4:=0) and (@a5:=0) and (@a6:=0) and (@a7:=0) and (@a8:=0)
    end as a,
    case @n when 9 then @n:=9 else @n:=@n+1 end as n,
    @a0:=@a1,@a1:=@a2,@a2:=@a3,@a3:=@a4,@a4:=@a5,@a5:=@a6,@a6:=@a7,@a7:=@a8,@a8:=close,
    (@a0+@a1+@a2+@a3+@a4+@a5+@a6+@a7+@a8)/@n as av
    from tbl,
    (select @i:=0, @n:=0,
            @a0:=0, @a1:=0, @a2:=0, @a3:=0, @a4:=0, @a5:=0, @a6:=0, @a7:=0, @a8:=0) a
    where name_id=2
    order by name_id, date
    

    If you need an average over 50 or 100 values, it's tedious to write, but worth the effort. The speed is close to the ordered select.

提交回复
热议问题