MySQL группировка по клиенту, а не по номеру телефона

0

У меня 5 таблиц:

  1. таблица service_agents
  2. таблица клиентов
  3. clients_data (отслеживает все клиентские данные, каждая часть данных вводится как другая строка в таблице.Так что, если у клиента, например, есть 2 телефонных номера, будет 2 строки - с подключением (внешний ключ) client_id),
  4. phone_call table (отслеживает телефонный звонок, включая номер телефона)
  5. phone_call_leg (отслеживает все ножки телефонного звонка, вкл. agent_id)

Я хочу отображать в любое время, когда агент вызывает клиента более 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, а затем узнать, вызвал ли агент какой-либо из этих номеров (т.е. вызов клиента) более двух раз?

  • 0
    «отслеживает все ноги телефонного звонка» - это жаргон, с которым я не знаком
  • 0
    телефонный звонок может иметь несколько ног. когда он перенаправляется или передается от одного агента другому, создается другой участок того же телефонного звонка
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Я не знаком с концепцией "нога телефона", но вы не можете сделать 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню