Autor | Zpráva | ||
---|---|---|---|
Giga Profil |
#1 · Zasláno: 19. 1. 2018, 16:34:28
Mám dotaz ohledně možností MySQL.
Mám poměrně rozsáhlou databázi, přesněji tabulku o počasí, která obsahuje položky o měření - datum, čas, teplota, vlhkost .... Záznamy jsou za několik let a jsou to měření za každou hodinu. Je to indexované podle data a času. A já bych chtěl vědet v jakém nejdelšim časovém intervale teplota nevystoupila nad nulu. Lze to uskutečnit jedním dotazem? Ďekuji. |
||
Keeehi Profil |
#2 · Zasláno: 19. 1. 2018, 17:16:27
|
||
TomášK. Profil * |
#3 · Zasláno: 19. 1. 2018, 17:40:13
Keeehi:
Odkazovaný návod mi přijde zbytečně složitý. Pro zdejší dotaz stačí (myslím) vyfiltrovat teploty nad nulou, a pak pomocí LAG() spočítat délku úseku mezi každou dvojicí řádků a vzít maximum. A moje řešení stejně jako odkazované má problém - MySQL neumí window funkce, snad v příští verzi. V MySQL to možná půjde nějak obejít proměnnou a zřejmě jednodušší a spolehlivější bude udělat si na to proceduru/funkci a projít tu tabulku kurzorem. |
||
Kajman Profil |
#4 · Zasláno: 19. 1. 2018, 21:58:21
Pokud by to bylo na novější mariadb, kterážto umí window funkce, tak bych zkusil něco jako
with hranice as ( radek pod nebo roven nule, takovy, ze predesly radek je nad nulou nebo neexistuje + priznak start union all radek pod nebo roven nule, takovy, ze nasledujici radek je nad nulou nebo neexistuje + priznak stop ) select datum_nasledujiciho_radku_stop-datum delka, datum from hranice where priznak='start' order by 1 desc limit 1 Pokud je to nutné na starších mysql, tak asi ta vlastní funkce a pokud to je úplně stará mysql, která ani uživatelské funkce nemá, tak asi zkusit použít uživatelské proměnné. Něco jako prochazet zaznamy dle casu a pocitat aktualni serii mrazu a vypsat (omezit pres having) az kdyz je teplota nad nulou a aktualni serie je vetsi nez dosavadni nejdelsi serie Z toho by to pak měl být poslední řádek. |
||
Giga Profil |
#5 · Zasláno: 20. 1. 2018, 10:04:31
Děkuji za reakce,
vidím to na "ruční" práci :) |
||
Časová prodleva: 6 let
|
0