我有这些时间值(varchar):[hh:mm]
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
现在,当我在excel中取平均值时,结果为: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 :(得分: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
答案 1 :(得分:0)
这也会照顾你。
Select Convert(Varchar(5),Convert(Time,DateAdd(mi,Avg(DateDiff(mi,0,Convert(DateTime,TimeColumn))),0)))
From TableName
答案 2 :(得分:0)
解决方案是使用分钟,然后将这些分钟转换为小时和分钟:
avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent)) / 60 as AvgHour,
avg(DATEPART(hh,TimeSpent)*60 + DATEPART(mi,TimeSpent)) % 60 as AvgMinute