Vad du verkar vilja ha här är löpande medelvärde av tidigare M poster med början från nuvarande post och vi måste välja den aktuella posten om aktuell posts kolumnvärde är större än löpande medelvärde.
Här är mitt försök till det:
SET @M := 2;
SELECT * FROM
(
SELECT (@rownumber:= @rownumber + 1) AS rn, yt.*
FROM your_table yt,(SELECT @rownumber:= 0) nums
ORDER BY name, id
) a
WHERE a.var1 >
(
SELECT avg(b.var1)
FROM
(
SELECT (@rownumber:= @rownumber + 1) AS rn, yt.*
FROM your_table yt,(SELECT @rownumber:= 0) nums
ORDER BY name, id
) b
WHERE b.rn > a.rn - @M AND b.rn <= a.rn
)
@M är antalet tidigare rekord som ska beaktas för att hitta löpande medelvärde.
Här är koden på SQL Fiddle
[EDIT]:
Här är en annan lösning som enligt mig borde vara mer effektiv än korrelerad fråga.
SET @M := 2;
SELECT a.* FROM
(
SELECT (@rownumber:= @rownumber + 1) AS rn, yt.*
FROM your_table yt,(SELECT @rownumber:= 0) nums
ORDER BY name, id
) a
JOIN
(
SELECT b.name, b.rn, AVG(c.var1) AS av
FROM
(
SELECT (@rownumber1:= @rownumber1 + 1) AS rn, yt.*
FROM your_table yt,(SELECT @rownumber1:= 0) nums
ORDER BY name, id
) b
JOIN
(
SELECT (@rownumber2:= @rownumber2 + 1) AS rn, yt.*
FROM your_table yt,(SELECT @rownumber2:= 0) nums
ORDER BY name, id
) c
ON b.name = c.name
AND c.rn > (b.rn - @M) AND c.rn <= b.rn
GROUP BY b.name,b.rn
) runningavg
ON a.name = runningavg.name
AND a.rn = runningavg.rn
AND a.var1 > runningavg.av
Här har jag använt enkel inner join
för att beräkna löpande medelvärde och igen med inre koppling har du valt rader som har ett kolumnvärde som är större än genomsnittet.
Här är koden på SQL Fiddle
Låt mig veta om det visade sig vara effektivt.