2010-04-12 150 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)