SUM минут SQL-сервер - PullRequest
       6

SUM минут SQL-сервер

2 голосов
/ 12 апреля 2010

Привет, ребята, Моя маленькая проблема выглядит так: У меня есть следующие столбцы: PHONE_NR, TIME (поле времени), Значение телефонного номера и продолжительности звонка. Мне нужно сгруппировать номер телефона и суммировать минуты. Филдс выглядит так:

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

Ответы [ 3 ]

5 голосов
/ 12 апреля 2010
SELECT PHONE_NR, SUM(DATEPART(minute, TIME)) FROM [table] GROUP BY PHONE_NR;

Насколько я знаю, это должно работать как для 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;

Результат:

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
1 голос
/ 12 апреля 2010

Вы можете использовать DATEDIFF, чтобы получить общее количество минут, прошедших с момента «ноль»

SELECT
 [PHONE_NR],
 SUM(DATEDIFF(minute, '00:00:00', [TIME]))
FROM
 [YourTable]
GROUP BY
 [PHONE_NR]
0 голосов
/ 30 мая 2013
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...