2013-03-11 9 views
9

平均時間の計算に問題があります。 私は複数の行を持っていますが、各行には時間形式のデータがあります したがって、すべての行の平均時間を計算し、行数を掛ける必要がありますが、もちろんデータ形式に問題があります私は整数で時間を掛ける必要があるので平均T-SQL計算時間

誰か助けを借りて助けてくれますか?ここで のthnx は、いくつかのデータです:

times 
00:00:00.7400000 
00:00:01.1870000 
00:00:00.6430000 
00:00:00.6100000 
00:00:12.9570000 
00:00:01.1000000 
00:00:00.7400000 
00:00:00.5300000 
00:00:00.6330000 
00:00:01.6000000 
00:00:02.6200000 
00:00:01.0300000 
00:00:01.9630000 
00:00:00.9800000 
00:00:01.0170000 
00:00:00.7600000 
00:00:00.7130000 
00:00:00.9730000 
00:00:01.0000000 
00:00:01.0530000 
00:00:02.9400000 
00:00:00.8200000 
00:00:00.8400000 
00:00:01.1800000 
00:01:25.8230000 
00:00:01.0000000 
00:00:00.9700000 
00:00:01.2930000 
00:00:01.3270000 
00:00:13.5570000 
00:00:19.3170000 
00:00:58.2730000 
00:00:01.6870000 
00:00:18.7570000 
00:00:42.8570000 
00:01:12.3770000 
00:00:01.2170000 
00:00:09.9470000 
00:00:01.4730000 
00:00:00.9030000 
00:00:01.0070000 
00:00:01.1100000 
00:00:01.6270000 
00:00:05.0570000 
00:00:00.6570000 
00:00:00.7900000 
00:00:03.2930000 
00:00:00.8600000 
00:00:01.0330000 
00:00:00.9300000 
00:00:00.8730000 
00:00:00.9600000 
00:00:00.8070000 
NULL 

ので、このデータaから平均時間または/およびそのデータの合計を必要とする

+0

「2013-01-13 08:00 am」に整数を掛ける必要がありますか? –

+0

'Date'と' Integer'の値をどのように乗算したいですか? '12/12/1212 * 12'の結果はどうでしょうか? – MarcinJuraszek

+1

すべての行の平均をとってそれを行数で掛けると、それはすべての行の合計と同じではありませんか? –

答えて

7

あなたは次のようなものを使用することができるはずです。

select 
    cast(cast(avg(cast(CAST(times as datetime) as float)) as datetime) as time) AvgTime, 
    cast(cast(sum(cast(CAST(times as datetime) as float)) as datetime) as time) TotalTime 
from yourtable; 

SQL Fiddle with Demoを参照してください。

これは、あなたが戻ってdatetime、最終的にあなたが大勢をすることによってこれを行うことができますtime

8

に値を変換するので、あなたはavg/sumを得ることができますfloat、その後、datetimetimesデータを変換し、日付算術の:

DECLARE @t TABLE(x TIME); 

INSERT @t VALUES('00:01:30'),('00:02:25'),('00:03:25'); 

SELECT CONVERT(TIME, DATEADD(SECOND, AVG(DATEDIFF(SECOND, 0, x)), 0)) FROM @t; 

はしかし、あなたはインターバル/時間を格納するTIMEを使用していない何をしなければなりません。 TIMEは、ある時点を保存するためのものです(たとえば、24時間以上を保存する必要がある場合は中断します)。代わりに、イベントの開始時刻と終了時刻を保存する必要があります。 2つのエンドポイントがある場合は、期間と平均期間をいつでも計算できます。

+1

私はあなたがコメントしたのを見たときになぜ私は答えを試みたのかわかりません。 – Taryn

+0

@bluefeetハッハッハ、あなたの答えはあまりにも良いですが、私は自分の好みにあまりにも多くのキャストがあると思います。 :-) –

+0

はい、私はイベントの開始点と終了点を保存しましたが、持続時間を計算してそれを処理する方が簡単だと思いました – user2158645

0

時間フィールドに期間を保存していると仮定すると、以下のようなDatediff関数を試して、期間(または合計時間)の合計を取得できます。平均化のために単に平均を使用してください。

デモ:http://sqlfiddle.com/#!3/f8c09/2

select sum(datediff(millisecond,0,mytime)) TotalTime 
from t 
0

これは、これと同様の状況において有用であり得ます。

以下は、深夜0時からの経過日数を日付/時刻に変換します。言い換えれば、整数で表される時間。あなたはそのことを平均して、時間に戻って変換することができます。

declare @dt datetime = GETDATE(); 
select DATEDIFF(minute, dateadd(dd, datediff(dd, 0, @dt), 0), @dt); 
--DATEDIFF(minute, [date without time i.e. midnight], [date/time of interest])