Oops, there should be an ORDER BY.

We Your B,C formula is equivalent to mine; I simplified it by dividing out C.  
Anyway, I like your way of describing it.

This might be a 'good' initial value:
SELECT @a := AVG(Value) FROM tbl;
or, maybe
SELECT @a := AVG(Value) FROM tbl WHERE ...; -- selecting only the first few 
rows.

> -----Original Message-----
> From: Hal?sz S?ndor [mailto:h...@tbbs.net]
> Sent: Monday, July 16, 2012 8:25 PM
> To: mysql@lists.mysql.com
> Subject: RE: Trouble with Average
> 
> >>>> 2012/07/16 14:25 -0700, Rick James >>>>
> Here's a different way to "smooth" numbers.  It uses an exponential
> moving average instead of "the last 5".
> 
> SELECT Time,
>        @a := (9 * @a + Value) / 10  AS moving_avg FROM tbl JOIN (
> SELECT @a := 0 ) AS x;
> 
> Notes:
> *  Make 10 larger or smaller, depending on how smooth you want it.
> *  9=10-1
> *  @a := 0 should be changed to some reasonable starting value, else
> the graph will be artificially low to start with.
> <<<<<<<<
> Hunh, MySQL: to use the optimizer s order for an initial value never
> would have occurred to me.
> 
> The important thing in using decaying average (I so know it) is this:
> @a := (B * @a + C * Value) / (B + C) and B, C > 0. The bigger B is the
> more important the past; therefore, the change is smaller and the graph
> is smoother. The smaller B is the less important the initial value is.
> 
> 
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to