SQL dotaz pro statistiku / kalendářová tabulka? rubrika: Databáze: SQL
Ahoj všichni,
řeším jednu statistiku a zajímalo by mně jakým způsobem byste vytáhli data z databáze (v mém případě MySQL). Oč jde:
Zákazník přijde reklamovat/servisovat zboží. Do tabulky servis si uložím případ a eviduji tu dvě data: datum založení a datum ukončení.
Nyní bych chtěl zobrazit, kolik bylo průměrně otevřených těchto případů za určité časové období a vůbec vývoj, jestli se počet servisu snižuje nebo navyšuje..
Např.: 11.10.2016 jsme měli otevřených 100 servisních případů. Za říjen 2016 to bylo v průměru 80 případů atd...
Napadli mně dvě varianty jak to udělat, ale ani jedna se mně nelíbí:
-
Vytvořit tabulku "kalendar" s jedním sloupcem kde budou před-generované dny (dotaz nelze optimalizovat, mysql neumí 2x range condition).
-
Ukládat si každý den otevřené případy do nové tabulky (toto mám teď, je to více dat, více práce o udržování aktuálních dat, ale je to rychlé)
INSERT INTO stats_servis (SELECT CURDATE(), servis.id FROM servis WHERE servis.otevreno = '1')
Jak by jste postupovali vy? Zvolili by jste např. úplně jinou databázi? Jde mně o obecný princip, jak efektivně vytáhnout data z databáze pokud jde o nějaký vývoj otevřených servisů, objednávek, kusů na skladě apod...
Díky všem
skvela otazka,resil bych pomoci PostgreSQL
1) selectnout dny ktere potrebuji pomoci selectu z time series (https://www.postgresql.org/docs/9.1/static/functions-srf.html) a joinout s pripady kde otevreno je mensi nez aktualni radek AND (zavreno IS NULL or zavreno je vetsi nez aktualni radek)
2) vytvorit si nad timto joinem view
3) kdyz potrebuji statistiku delat selecty nad timto view group by month, year...
nebo - primo na tohle jsou delane window funkce (PostgreSQL, MS T-SQL),
https://www.postgresql.org/docs/9.1/static/tutorial-window.html
http://stackoverflow.com/questions/14113469/generating-time-series-betwe...
docela pekne si s tim hraje autor tady
http://no0p.github.io/postgresql/2014/05/08/timeseries-tips-pg.html
rozhodne bych data ukladal v co nejcistsi podobe a agregaci resil potom pomoci databazovych funkci (agregovana data uz nikdy zpet "nedeagregujete")
Pro zobrazení všech 4 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře