SUM分钟SQL服务器

san*_*ndu 2 sql sql-server time sum

嗨伙计们,我的小问题是这样的:我有这个列:PHONE_NR,TIME(时间字段),意思是主叫电话号码和通话时间.我需要分组电话和总和分钟.Filds看起来像这样:

 nr          time 
726028xxx 00:07:07 
735560css 00:07:37 
726028xxx 00:07:55 
Run Code Online (Sandbox Code Playgroud)

And*_*lam 5

SELECT PHONE_NR, SUM(DATEPART(minute, TIME)) FROM [table] GROUP BY PHONE_NR;
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该适用于SQL Server 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;
Run Code Online (Sandbox Code Playgroud)

结果是:

phone_nr  | minutes
726028xxx | 14
735560css | 7
Run Code Online (Sandbox Code Playgroud)

编辑:

此版本与上述版本相同,不同之处在于它还考虑了秒和小时(例如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;
Run Code Online (Sandbox Code Playgroud)

如果第一条记录是以下结果如下01:07:07.

phone_nr  | minutes
726028xxx | 75.033332
735560css | 7.616666
Run Code Online (Sandbox Code Playgroud)