2013-01-10 1 views
1

У меня есть эти значения времени (VARCHAR): [чч: мм]Средняя средняя разница между sql и excel?

2:41 
2:31 
1:46 
21:41 
18:19 
17:56 
18:4 
17:17 
17:2 
16:39 
0:40 
0:38 
0:38 
0:29 
1:19 
2:52 
0:15 
16:55 
17:25 
17:15 
3:31 
2:7 
2:21 
1:35 
1:38 
0:17 
0:28 
18:40 
2:54 
18:14 
2:31 
18:9 
18:10 
0:39 
0:38 
3:5 
3:20 
3:6 
2:58 
2:31 
2:4 
1:54 
2:2 
1:44 
1:39 
1:22 
1:6 
1:15 
0:53 
1:13 
20:32 
1:11 
0:36 
0:35 
0:26 
1:3 
4:20 
3:42 
3:7 
3:16 
2:44 
2:30 
0:40 
2:5 
4:21 
2:6 
3:54 
3:45 
3:31 
18:59 
18:59 
18:47 
18:43 
19:40 
19:29 
2:19 
1:9 
4:10 
3:50 
2:20 
1:16 
4:33 
21:23 
20:57 
16:31 
1:51 
5:15 
1:48 
3:15 
1:32 
4:19 
4:17 
1:59 
3:38 
1:55 
2:11 
1:26 

Теперь, когда я делаю в среднем первенствует результат является: 6:14

И если я это в SQL: (с помощью: This)

select 
    Month(OperationDate) [Month], count(distinct IdOrder) OrderQty, 
    avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent)) % 24 as AvgHour, 
    avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent))/24 as AvgMinute 

from @tmp1 tmp1 
inner join tblCheckList tcl on tmp1.IdCheckList = tcl.IdCheckList 
where TimeSpent<>'0:0' 
group by Month(OperationDate) 

возвращает в среднем: 10:15

Почему разница?

+0

ли вы проверить, какой из двух является правильным? – home

+0

Как насчет использования типа данных 'time'? – Kermit

+0

Как проверить, какой из них правильный? :( – Somebody

ответ

0

Решение работать с минутами, а затем преобразовать эти минуты в часах и минутах:

avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent))/60 as AvgHour, 
avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent)) % 60 as AvgMinute 
1

Почему % 24 и / 24?

Разве вы не разделили бы средние минуты на 60, чтобы получить средний час?

avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent))/60.0 as AvgHour, 
avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent)) as AvgMinute 
+0

Привет, Майкл, сделав это:' avg (DATEPART (hh, TimeSpent) * 60 + DATEPART (mi, TimeSpent))/60 as AvgHour, \t avg (DATEPART (hh, TimeSpent) * 60 + DATEPART (mi, TimeSpent))/24 как AvgMinute' Я могу сопоставить результат Excel. Но я думаю, что решение Excel было правильным, спасибо. – Somebody

+0

Но обратите внимание, что мне пришлось разделить часть AvgMinute на 24. – Somebody

+0

@Somebody Но в чем причина деления онемения er минут на 24? Я бы понял, разделив часы на 24, чтобы получить долю дня ... но я не понимаю, как 24 относится к числу минут ... –

0

Это позаботится и о вас.

Select Convert(Varchar(5),Convert(Time,DateAdd(mi,Avg(DateDiff(mi,0,Convert(DateTime,TimeColumn))),0))) 
From TableName