2013-03-11 2 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 

데이터의 필요성 평균 시간 및/또는 합

+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을 참조하십시오.

이것은 다음 float은 그래서 당신은 당신이 마지막으로 datetime하고 다시 값을 변환의 avg/sum 얻을 수하는 datetimetimes 데이터를 변환하는 time

8

당신은 무리를 수행하여이 작업을 수행 할 수 있습니다 날짜 산술 :

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 시간 이상을 저장해야하는 경우에는 중단됩니다). 대신 이벤트의 시작 및 종료 시간을 저장해야합니다. 두 종점이있는 경우 항상 지속 시간 (평균 지속 시간)을 계산할 수 있습니다.

+1

내가 왜 당신이 코멘트를 보았을 때 대답하려고했는지 모르겠습니다. – Taryn

+0

@bluefeet 하하, 내 대답에 너무 많은 캐스트가 있다고 생각 하긴하지만 당신의 대답도 좋습니다. :-) –

+0

예, 이벤트의 시작점과 끝점을 저장했지만 지속 시간을 계산하고 작업하기가 더 쉽다고 생각했습니다. – user2158645

0

시간 필드에 기간을 저장했다고 가정하면 아래의 Datediff 함수를 사용하여 기간 (또는 총 시간)의 합계를 얻을 수 있습니다. 평균으로 평균을 사용하기 만하면됩니다.

데모 : http://sqlfiddle.com/#!3/f8c09/2

select sum(datediff(millisecond,0,mytime)) TotalTime 
from t 
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])