У меня 5 таблиц:
Я хочу отображать в любое время, когда агент вызывает клиента более 2 раз в день. Это то, что мне удалось:
SELECT
pcl.agent_id,
CONCAT( sa.first_name, ' ', sa.last_name ) AS 'Agent Name',
pc.remote_number,
COUNT( pcl.agent_id ) AS 'times_called'
FROM
phone_call_leg pcl
JOIN phone_call pc ON pcl.call_id = pc.id
JOIN service_agents sa ON sa.id = pcl.agent_id
GROUP BY
pcl.agent_id,
pc.remote_number
HAVING
times_called > 2
Этот запрос возвращает, если агент вызывал определенное число более двух раз. Но это не учитывает, если 2 числа принадлежат одному клиенту. Проблема будет в том, что он не поймает следующий сценарий: агент вызывает одно из этих номеров один раз, а другой номер два раза, по существу, вызывающий клиента в общей сложности 3 раза.
Вопрос: как мне изменить его, чтобы проверить, имеет ли клиент более одного номера телефона в таблице clients_data, а затем узнать, вызвал ли агент какой-либо из этих номеров (т.е. вызов клиента) более двух раз?
Я не знаком с концепцией "нога телефона", но вы не можете сделать group_by по client_id, а не по номеру?
SELECT
COUNT(* ) AS 'times_called' ,
pcl.agent_id,
CONCAT( sa.first_name, ' ', sa.last_name ) AS 'Agent Name',
pc.remote_number
FROM
phone_call_leg pcl
JOIN phone_call pc ON pcl.call_id = pc.id
JOIN service_agents sa ON sa.id = pcl.agent_id
JOIN clients_data clid on clid.tel= pc.remote_number
JOIN clients cli on cli.id = clid.client_id
GROUP BY
pcl.agent_id,
cli.id
HAVING
times_called > 2;