2013-05-06 7 views
7

Mam bazę danych SQL z polem czasu.sposób zwracania średniej z pola czasu sql

Pole czas wykonawcze zawiera 02:06:24, 00:01:12 etc ...

Próbuję zwrócić średnio tej dziedzinie w HH: MM: SS użyciu;

SELECT AVG(runtime) 
FROM `result` 

ta zwraca 8312.2342729307 które uważałem, że było średnio w sekundach jednak kiedy przekształcono minut to jest błędne.

Jestem w stanie zwrócić MIN i MAX w odpowiednim formacie, ale nie mogę pobrać AVG, jak to zrobić?

Jeśli to nie możliwe, wybierz środkowy element, który ma być średnią medianą?

+0

Nie jest jasne, który baz używasz: Tylko MySQL? A może inny? – Jocelyn

+0

Nie jestem pewien, szczerze mówiąc, jego hostowany na http://www.numyspace.co.uk/phpmyadmin –

+0

Jak myślisz, jaka powinna być średnia godzina druga i piąta? Jaka powinna być * suma * drugiej i piątej? –

Odpowiedz

2

Nie można użyć funkcji AVG() przed datetime/TIME

ja odlewu DATETIME do dziesiętnych (18, 6), które pojawia się w celu uzyskania rozsądnie (+ - kilka milisekund) dokładny wynik.

SELECT cast(CAST(AVG(CAST(runtime AS DECIMAL(18, 6))) AS DATETIME) as time) 
FROM dbo.result; 
+0

Powracający wiersz, ale jest to NULL –

+0

Szybkie testowanie sugeruje, że 'AVG()' traktuje '01: 30: 00' jako '13000', nawet w trybie ścisłym: -? Jeśli ktoś znajdzie stronę podręcznika, która wyjaśnia, że ​​powinien ją opublikować tutaj. –

3

Więc zilustrowania ...

SELECT SEC_TO_TIME((TIME_TO_SEC('02:06:24')+TIME_TO_SEC('00:01:12'))/2) x; 
+----------+ 
| x  | 
+----------+ 
| 01:03:48 | 
+----------+ 
+0

SELECT SEC_TO_TIME ((TIME_TO_SEC ('22: 06: 24 ') + TIME_TO_SEC ('00: 01: 12'))/2) x; daje mi 11: 03: 48.0000 ... Który jest zły wynik. Prawidłowy wynik powinien być 23: XX ... –

+0

@ApoorvaShah Twój jest inny problem od pierwotnie zadawane. Również XX nie jest prawidłowym czasem. – Strawberry

+0

tak xx oznacza sekundę ... Nie obliczałem dokładnej średniej. –

Powiązane problemy