Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak uzyskać wyższy trend za pomocą avg mysql

Wydaje się, że potrzebujesz tutaj średniej kroczącej z ostatnich M rekordów, zaczynając od bieżącego rekordu i musimy wybrać bieżący rekord, jeśli wartość kolumny bieżącego rekordu jest większa niż średnia krocząca.

Oto moja próba:

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 to liczba przeszłych rekordów, które należy wziąć pod uwagę przy obliczaniu średniej bieżącej.

Oto kod pod adresem SQL Fiddle

[EDYTUJ]:

Oto kolejne rozwiązanie, które według mnie powinno być bardziej wydajne niż skorelowane zapytanie.

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

Tutaj użyłem prostego inner join aby obliczyć średnią kroczącą i ponownie z wewnętrznym złączem, wybierz wiersze, które mają wartość kolumny większą niż średnia.

Oto kod pod adresem SQL Fiddle

Daj mi znać, czy to okazało się skuteczne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabele tłumaczeń mysql z brakującą wersją językową

  2. pobierz identyfikator ostatnio wstawionego rekordu bez użycia mysql_insert_id()

  3. wstaw dane xml do mysql za pomocą simpleXML

  4. Co jest nie tak z moją instrukcją MySQL?

  5. mysql wartości zapytania dołączającego do tabeli 2