Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Średnia parametru w funkcji czasu
Hori
post 30.06.2017, 22:41:46
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.06.2017

Ostrzeżenie: (0%)
-----


W tabeli mam parametry z wartoscią liczbowa i timestamp co minutę.
Obecnie pobieram średnią z ostaniej godziny.

Sprawdzam też jak długo wstecz średnia utrzymuje się w danym przedziale.

Obecnie robie to w pętli php zmniejszając datę/czas początkowe o pięć minut i sprawdzam czy jeszcze średnia jest w danym przedziale.

Czy można to samo zrealizować wyłącznie poprzez jedno zapytanie do mySQL?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
trueblue
post 1.07.2017, 11:08:26
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie wiem czy to Ci coś ułatwi, ale poniższe zapytanie pokazuje średnie w interwałach czasowych co 5 minut (w przeciągu ostatnich ~8 godzin) począwszy od maksymalnej godziny (ostatniego pomiaru).

  1. SELECT interwal, MAX(w.czas), AVG(w.wartosc)
  2. FROM wartosc AS w,
  3. (SELECT MAX(czas) AS maks FROM wartosc) AS maks,
  4. (SELECT (a.a+10*b.a)*5 AS interwal FROM (
  5. (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
  6. CROSS JOIN
  7. (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
  8. )) AS interwaly
  9. WHERE w.czas<=(DATE_SUB(maks, INTERVAL interwal MINUTE)) AND w.czas>(DATE_SUB(DATE_SUB(maks, INTERVAL 60 MINUTE), INTERVAL interwal MINUTE))
  10. GROUP BY interwal


Tabela wartosc ma kolumny: id_wartosc, czas (DATETIME), wartosc



--------------------
Go to the top of the page
+Quote Post
Hori
post 2.07.2017, 18:20:52
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.06.2017

Ostrzeżenie: (0%)
-----


Dzięki, query ciekawe, pewnie gdzies sie przyda...

Ja szukam czegos w rodzaju
select ilosc_minut od teraz wstecz z tabela
jesli srednia parametru za ten okres wynosi powyzej x..

Chyba jednak trzeba zostać przy pętli i tak długo cofać się w czasie jak dlugo średnia się utrzymuje powyżej wartości.

Potrzebuje to do serwisu aurora.report , te 'kafelki' daja kolorystyczną reprezentację wartości danego parametru, ale istotne jest też jak dlugo parametr ma dany poziom wartości.
Nie da się niestety pójść po samej wartości dla timestamp, bo chwilowy spadek/wzrost parametru nie ma dużego wplywu na calość monitorowanego zjawiska.
Stąd średnia, a jeszcze lepiej mediana... ale to już nie wchodzi w zakres mojego pytania.
Go to the top of the page
+Quote Post
trueblue
post 2.07.2017, 18:42:22
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A jak zadana jest ta graniczna wartość średniej? To jest najświeższa średnia, czy po prostu jakaś inna, z zewnątrz?
Bo jeśli to drugie, to wystarczy do tego zapytania dodać warunek i wyciągnąć pierwszy, najstarszy rekord ze średnią w tym zakresie.


--------------------
Go to the top of the page
+Quote Post
Hori
post 2.07.2017, 21:14:27
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.06.2017

Ostrzeżenie: (0%)
-----


To jest tak...
Jest część prezentująca stan obecny, to te wartości na 'kafelkach' i jest część odpowiedzialna za predykcje.
To wlaśnie na potrzeby predykcji sprawdzam (teraz w petli) jak dlugo srednia utrzymuje sie w danym zakresie.
Niby dużego opóźnienia ta pętla nie wprowadza, bo jeśli średnia za ostanią godzinę jest poniżej pewnej wartości (albo powyżej zera dla Bz które działa odwrotnie) to nic więcej się nie liczy i algorytm nie wchodzi w pętle.

To działa, liczy, ale jak to bywa, z czasem szukamy bardziej eleganckich rozwiązań.




x= 60min
srednią liczy dz wartości miedzy (teraz - x) a teraz..
jeśli średnia wieksza niż wartość progowa, wchodzi w pętle..
petla tylko zwiększa x o 5min i wykonuje się póki średnia nie spadnie ponizej zadanej wartosci.
x - 5min to czas używany do predykcji.


Dla każdego parametru jest 5 przedzialów, z tym że jeden jest poniżej progu wejścia w pętle (zielony kafelek)

Go to the top of the page
+Quote Post
trueblue
post 2.07.2017, 21:33:39
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Zapytanie, które pokazałem liczy średnią od czasu ostatniego wyniku (X), do godziny wstecz (X-60).
Średnia jest obliczana z przesunięciem 5 minut 100-krotnie.
Czyli kolejna średnia z przedziału X-5 do X-65, kolejna X-10 do X-70, itd.

W prosty sposób można zmodyfikować zapytanie, aby startować od konkretnego czasu, a nie czasu najświeższego wyniku.

Natomiast dodając warunek na obliczoną w każdym powyższym przedziale średnią i wybierając najświeższy jeden wynik (obydwa działania w tym zapytaniu), otrzymamy, jak rozumiem szukany wynik.


--------------------
Go to the top of the page
+Quote Post
Hori
post 2.07.2017, 22:42:48
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.06.2017

Ostrzeżenie: (0%)
-----


Szukanym wynikiem jest liczba minut, dla ktorej srednia od teraz wstecz zachowuje ciąglość powyzej pewnej wartości... bez sprawdzenia kolejno zwróconych przez twoje query rekordów chyba nie dostaniemy tej liczby minut, czyli tez trzeba wejsc w pdtle... ale jutro wezme twoj pomysl na warsztat i zobacze co sie da zmodyfikowac.

Dzieki
Go to the top of the page
+Quote Post
trueblue
post 3.07.2017, 09:19:10
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Znajdując najświeższy rekord niespełniający warunków, będziesz wiedział, że od nowszego od niego o 5 minut do najnowszego, jest zachowana ciągłość.
Nadal można to zrobić w zapytaniu.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:12