Autor | Zpráva | ||
---|---|---|---|
Erax Profil * |
#1 · Zasláno: 13. 7. 2019, 12:01:41
Dobrý den,
ukládám si venkovní teplotu a ráda bych si udělala takový přehled o min(), max(), avg() za jednotlivé dny a měsíce. Potřebuji však poradit, jak udělat mySQL dotaz, aby to odpovídalo kriérii DEN, MĚSÍC. V mySQL jsem použila ukládání teploty takto, snad dobře :) teploty id int(11) unsigned Auto Increment teplota_2m_meteo decimal(4,1) timestamp datetime time int(11) unsigned Ukládám pro jistotu dva formátu času, protože si nejsem jistá, co je nejlepší používat. timestamp: 2019-07-13 11:03:00 time: 1563008580 Neporadí mně někdo? Za Váš čas budu strašně moc ráda. PS: zvažuji, že bych nastavila CRON na každý den a vždy za předchozí den provedla min, max, avg z daného dne a uložila zvlášť do mySQL, což by mohlo být lepší. Co myslíte? |
||
Radek9 Profil |
#2 · Zasláno: 13. 7. 2019, 20:24:57
Erax:
Normálně si z toho datetimu vybereš rok, měsíc a den a podle toho uděláš group: SELECT YEAR(timestamp), MONTH(timestamp), DAY(timestamp), MIN(teplota_2m_meteo), MAX(teplota_2m_meteo), AVG(teplota_2m_meteo) FROM teploty GROUP BY YEAR(timestamp), MONTH(timestamp), DAY(timestamp) |
||
Keeehi Profil |
#3 · Zasláno: 14. 7. 2019, 09:42:34
Erax:
„zvažuji, že bych nastavila CRON na každý den a vždy za předchozí den provedla min, max, avg z daného dne a uložila zvlášť do mySQL, což by mohlo být lepší. Co myslíte?“ To je zbytečné. Databáze je dostatečně výkonná, chytrá a rychlá a těch pár čísel by měla zvládnout spočítat úplně bez problémů. Kdyby ti stanice každý den generovala miliony měření a těch stanic bys měla miliony, pak bys určitě nějakou optimalizaci potřebovala ale to asi nebude tvůj případ. |
||
Erax Profil * |
#4 · Zasláno: 14. 7. 2019, 20:06:49
Mockrát děkuji. Jak ale z mySQL dotazu co napsal Radek9 zjistím i datum a čas, kdy třeba daná hodnota min mac teploty byla? Ještě jednou moc děkuji za výpomoc.
|
||
Kajman Profil |
#5 · Zasláno: 15. 7. 2019, 08:49:52
Jakou verzi mysql máte? Když je minimální a maximální teplota vícekrát za den, potřebujete všechny nebo se má vybrat jen některá?
|
||
Erax Profil * |
#6 · Zasláno: 15. 7. 2019, 10:11:22
Používám starou verzi 5.0.51a. Půjde to vůbec? :)
Minimální a maximální jenom jednou, jenom nevím jak. V minimu časově hned někde na začátku a max někde na konci v rámci času? Nechci to ale komplikovat. |
||
Kajman Profil |
#7 · Zasláno: 15. 7. 2019, 10:24:01
V té staré to moc rychlé nebude. Lepší by byla databáze postgresql, ta umí window funkce i indexy nad funkcemi.
V té staré by to mělo jít pro jednotlivé dny (asi to bude pomalé) nějak takto: SELECT g.*, (SELECT Min(t.timestamp) FROM teploty t WHERE Date(t.timestamp) = g.datum AND t.teplota_2m_meteo = g.tmin) casmin, (SELECT Max(t.timestamp) FROM teploty t WHERE Date(t.timestamp) = g.datum AND t.teplota_2m_meteo = g.tmax) casmax FROM (SELECT Date(timestamp) datum, Min(teplota_2m_meteo) tmin, Max(teplota_2m_meteo) tmax, Avg(teplota_2m_meteo) tavg FROM teploty GROUP BY Date(timestamp)) g ORDER BY g.datum |
||
Časová prodleva: 6 let
|
0