SQL - avg z timestamp
asked 2014-12-02 14:48:22 +0100
Anonymous
Ahojte, da sa nejak rozumne vypocitat cez AVG v SQL priemer zo stlpca, ktory ma hodnotu timestamp? Mam to v tvare hh:mm. Dik.
asked 2014-12-02 14:48:22 +0100
Anonymous
Ahojte, da sa nejak rozumne vypocitat cez AVG v SQL priemer zo stlpca, ktory ma hodnotu timestamp? Mam to v tvare hh:mm. Dik.
Typ TIMESTAMP je určen pro časový okamžik, ne pro ukládání doby trvání. Z toho vyplývá, že průměr z toho nedává smysl ("průměrný okamžik příchodu zákazníka je 26. června 2014 v 13 hodin 56 minut 27,721 sekund") a tudíž to databáze normálně nepodporují (i když bych nechtěl dát hlavu na špalek, že třeba neexistuje nějaká, která by to dokázala - v otázkách tohoto typu je nutné říct, pro kterou databázi je otázka určena).
Dále budu předpokládat, že skutečně ukládáte jen hodiny a minuty a všechno ostatní je "nastavené na nulu" (takže fakticky máte hodnoty typu "1.1.1900 hh:mm:00", ale interpretujete je jako "měřená operace trvala hh hodin a mm minut").
Normálně se to dělá jedním ze dvou způsobů, příčemž oba jsou database-specific:
Víme, jak databáze ukládá datum a čas. Pak můžeme vhodně odečíst nebo přetypovat a odečíst dva časové okamžiky a dostaneme rozdíl v nějaké jednotce, kterou pak přenásobíme na jednotku požadovanou. Například u Firebirdu víme, že datum a čas ukládá jako počet dní od nějakého počátečního data, takže pokud chceme dobu trvání operace v minutách, můžeme napsat něco jako SELECT (delka-CAST('1900-01-01 00:00:00' AS TIMESTAMP))*24*60
(předpokládáme, že vaše timestampy jsou uložené s datumem 1.1.1900).
Víme, že naše databáze má funkce pro rozsekání timestampu na dílčí části. Pak můžeme použít tyto funkce pro vytáhnutí hodin a minut a vhodné vynásobení: SELECT 60*EXTRACT(HOUR FROM delka)+EXTRACT(MINUTE FROM delka)
.
Na takto vypočítanou hodnotu už můžeme použít AVG, protože to už je normální desetinné číslo.
Připomínám, že kompatibilita napříč databázemi je nulová.
Asked: 2014-12-02 14:48:22 +0100
Seen: 160 times
Last updated: Dec 02 '14
Greg ( 2014-12-02 15:14:34 +0100 )editSUM(sloupec) / COUNT(sloupec)
by nefungoval? timestamp je int, tak by s tím neměl být problém...Timestamp je int v MySQL, ale ne obecně. Pozor na to!
Josef Kokeš ( 2014-12-02 15:17:03 +0100 )edit