2013-05-06 12 views
7

私は時間フィールドを持つSQLデータベースを持っています。SQL時間フィールドの平均を返す方法

ランタイム時間フィールドは02:06:24, 00:01:12などが含まれています...

私はHHでこのフィールドの平均値を返すようにしようとしています:MM:SS形式が使用。

SELECT AVG(runtime) 
FROM `result` 

これは、私はこれは間違っている分に変換しかし秒の平均だと思った8312.2342729307を返します。

MINとMAXのランタイムを正しい形式で返すことはできますが、AVGを取得することはできません。どのようにすればいいですか?

中間平均として使用する中間要素を選択するのに失敗していますか?

+0

...、例示のためにあなたが使用しているどのデータベース不明ですか?または別の? – Jocelyn

+0

私は正直であると確信していない、そのホストhttp://www.numyspace.co.uk/phpmyadmin –

+0

あなたは2時と5時の平均はどうなるべきだと思いますか? 2時と5時の* sum *はどうなるべきですか? –

答えて

2

あなたは、私がDECIMAL(18、6)合理的に生じるように思われるにDATETIMEをキャストしていますDATETIME/TIMEに対して

をAVG()関数を使用することはできません(+ - 数ミリ秒)を正確な結果。のみMySQLを:

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

これはNULLを返す行ですが、これはNULLです –

+0

クイックテストは、厳密なモードでも 'AVG()'は '01:30:00'を' 13000'として扱うことを示唆しています。誰かがここに投稿するべきであることを説明するマニュアルページを見つけることができる場合。 –

3

ので、

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; 私に11:03:48.0000を与える...これは間違った結果です。正しい結果は23:XXでなければなりません。 –

+0

@ApoorvaShahあなたの問題は最初に尋ねられたものとは異なる問題です。また、XXは有効な時間ではありません。 – Strawberry

+0

はいxxは数秒を意味します...私は正確な平均を計算していません。 –