2010-04-12 151 views
2

HI guys, 我的问题是这样的: 我有这个列:PHONE_NR,TIME(时间字段),意思是主叫电话号码和通话时间。我需要将电话分组并将总结分钟。 Filds看起来是这样的:SUM分钟SQL服务器

nr   time 
726028xxx 00:07:07 
735560css 00:07:37 
726028xxx 00:07:55 
+2

如果你的问题解决了,你应该接受的标记答案。 – daniloquio 2011-09-30 22:23:34

回答

5
SELECT PHONE_NR, SUM(DATEPART(minute, TIME)) FROM [table] GROUP BY PHONE_NR; 

据我所知,这应该两个SQL服务器DATETIME和2008年TIME数据类型的工作。

实施例:在

DECLARE @tbl TABLE 
(
    phone_nr varchar(10), 
    call_time TIME 
); 

INSERT INTO @tbl VALUES ('726028xxx', '00:07:07'); 
INSERT INTO @tbl VALUES ('735560css', '00:07:37'); 
INSERT INTO @tbl VALUES ('726028xxx', '00:07:55'); 

SELECT phone_nr, SUM(DATEPART(minute, call_time)) AS total_call_time FROM @tbl GROUP BY phone_nr; 

结果:

phone_nr | minutes 
726028xxx | 14 
735560css | 7 

EDIT

这个版本是与上述相同,除了它也考虑到秒和小时(例如1小时7分07秒= 67.117分钟),所以它更准确。

SELECT 
    phone_nr, 
    SUM(CAST(DATEPART(second, call_time) + (DATEPART(minute, call_time) * 60) + (DATEPART(hour, call_time) * 3600) AS decimal)/60) AS total_call_time 
FROM 
    @tbl 
GROUP BY 
    phone_nr; 

如果第一条记录是01:07:07,结果如下。

phone_nr | minutes 
726028xxx | 75.033332 
735560css | 7.616666 
+0

如果通话时间超过一小时,这种情况会继续吗? – 2010-04-12 10:14:37

+0

@Robin - 它需要编辑以包含小时部分 - 我刚刚编辑了这个到我的答案! – 2010-04-12 10:18:27

+0

@Robin,我刚刚编辑了我的答案,所以它也可以工作几个小时。 – 2010-04-12 10:23:08

1

您可以使用DATEDIFF得到,因为时间已经过去了分钟的总数“零”

SELECT 
[PHONE_NR], 
SUM(DATEDIFF(minute, '00:00:00', [TIME])) 
FROM 
[YourTable] 
GROUP BY 
[PHONE_NR] 
+0

罗宾,我已编辑你的答案,包括'SUM()';-) – 2010-04-12 10:17:27

+0

公顷,谢谢....我没有运行它或任何东西,只是键入它:) – 2010-04-12 10:25:47

+0

10q很多人,我用DATEDIF,它的作品非常棒:) – sandu 2010-04-12 10:46:12

0
declare @v1 varchar(50) 
declare @v2 varchar(50) 
set @v1='03:10' 
set @v2='01:50' 

--select cast(left(v1,2) as int) + cast(left(v2,2)as int) 

select 
cast(
cast(left(@v1,2) as int) + cast(left(@v2,2)as int) 
+(cast(right(@v1,2) as int) + cast(right(@v2,2) as int))/60 as varchar) 

+':'+cast((cast(right(@v1,2) as int) + cast(right(@v2,2) as int))%60 as varchar)