Моя БД сохраняет телефонные звонки, которые делает моя компания.Мне нужно сделать запрос на выборку, который выбирает всех уникальных людей, и для каждого человека он должен выбрать:
- Количество входящих вызовов
- Количество исходящих вызовов
- Всегозвонки
- Среднее время звонка
Я попробовал это и застрял при выборе входящих и исходящих звонков.Я объясню, как увидеть, когда вызов является входящим или исходящим.
Когда заполнен OriginationDevice
, входящий вызов для DestinationName
.Когда DestinationDevice
заполнен, это исходящий вызов для OriginationName
.
Мне нужны все уникальные DestinationName
или OriginationName
и перечисляются количество входящих, исходящих и общих звонков и, конечно, среднее время звонка.Я далеко продвинулся, но не могу получить входящий и исходящий запрос одним запросом.
Посмотрите мою SQL Fiddle , где вы можете поиграть, чтобы помочь мне!Может ли кто-нибудь помочь мне получить среднее время звонка, исходящие звонки, входящие звонки и общее количество звонков для каждого человека?
Моя попытка запроса:
SELECT * FROM (
SELECT
IFNULL (SUM( CASE WHEN OriginationDevice != '' AND ConnectTime != '' THEN
DATEDIFF(ConnectTime, EndTime) ELSE null END ) / COUNT(case when
OriginationDevice <> '' then 1 else null end), 0) as calltime,
COUNT(case when OriginationDevice != '' then 1 else null end) as inbound,
COUNT(case when DestinationDevice != '' AND OriginationDevice = '' then 1
else null end) as outbound,
COUNT(*) as total,
DestinationName
FROM calls WHERE (YEAR(EndTime) = 2018 AND MONTH(EndTime) = 12) and
(OriginationDevice != '' or DestinationDevice != '')
AND ConnectTime != '' GROUP BY DestinationName
) as t1
WHERE total > 0 ORDER BY total DESC, calltime
Это таблица sql:
CREATE TABLE IF NOT EXISTS `calls` (
`OriginationName` varchar(200) NOT NULL,
`DestinationName` varchar(200) NOT NULL,
`ConnectTime` DATETIME NOT NULL,
`EndTime` DATETIME NOT NULL,
`OriginationDevice` varchar(200) NOT NULL,
`DestinationDevice` varchar(200) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `calls` (`OriginationName`, `DestinationName`, `ConnectTime`, `EndTime`, `OriginationDevice`, `DestinationDevice`) VALUES
('Person 1', 'Person 5', '2018-12-11 11:26:12', '2018-12-11 11:26:18', '243', '(call routing)'),
('Person 2', 'Person 3', '2018-12-11 10:16:12', '2018-12-11 10:16:54', '', '(call routing)'),
('Person 5', 'Person 1', '2018-12-11 10:21:12', '2018-12-11 10:22:22', '', ''),
('Person 2', 'Person 1', '2018-12-11 11:26:12', '2018-12-11 11:26:52', '233', ''),
('Person 1', 'Person 4', '2018-12-11 12:26:12', '2018-12-11 12:28:25', '456', ''),
('', 'Person 1', '2018-12-11 14:56:12', '2018-12-11 14:57:24', '', '(call routing)'),
('Person 3', '', '2018-12-11 15:26:12', '2018-12-11 15:26:37', '223', '');
Мой ожидаемый результат в запросе.