Я никогда не мог разобраться с ВНУТРЕННИМИ СОЕДИНЕНИЯМИ (или любыми другими типами СОЕДИНЕНИЙ в этом отношении), поэтому я изо всех сил пытаюсь понять, как использовать это в моей конкретной c ситуации. На самом деле, я даже не уверен, что мне это нужно. Я смотрел на другие примеры и читал учебные пособия, но мой мозг, похоже, просто не работает так, как нужно для его получения (или он вообще не работает).
Вот сценарий:
У меня есть две таблицы -
- phone_numbers - эта таблица содержит список телефонных номеров, принадлежащих множеству разных клиентов. Один клиент может иметь несколько номеров. Для простоты мы будем говорить, что поля 'number_id', 'customer_id', 'phone_number'.
- call_history - в этой таблице есть запись каждого отдельного вызова, что один из этих номеров в Первый стол мог иметь. Там есть запись для каждого отдельного звонка на протяжении многих лет. Опять же, для простоты, мы скажем, что соответствующие поля являются customer_id, phone_number, call_start_time.
То, что я пытаюсь сделать sh, - это найти все числа, принадлежащие конкретному customer_id в таблице телефонных номеров и использовать эту информацию для поиска в таблице call_history и определения количества вызовов, полученных каждым номером телефона, и сгруппировать их по количеству вызовов для каждого номера, предпочтительно также показывая нули, где номер не имеет принимал любые звонки вообще.
Причина, по которой нулевые вызовы важны, заключается в том, что это данные, которые меня интересуют. В противном случае, я мог бы просто получить всю информацию из таблицы call_history. Но то, что я пытаюсь достичь, это найти цифры без активности.
Все, что мне удалось сделать sh - это выполнить один запрос, чтобы получить все номера, принадлежащие одному клиенту:
SELECT customer_id, phone_number FROM phone_numbers WHERE customer_id = Y;
Затем выполнить второй запрос, чтобы получить все телефоны. вызовы для этого customer_id в течение установленной продолжительности:
SELECT customer_id, phone_number, COUNT(*) FROM call_history WHERE customer_id = Y and call_start_time >= DATE_SUB(SYSDATE(), INTERVAL 30 DAY) GROUP BY phone_number;
Затем мне пришлось использовать данные, возвращенные в обоих запросах, и использовать функцию VLOOKUP в Excel, чтобы сопоставить количество вызовов для каждого отдельного номера со второго запросить список всех номеров из первого запроса, оставив, таким образом, пробелы в моей таблице «все номера» и определив номера, на которые не было звонков за этот период времени.
Я надеюсь, что есть какой-то способ сделать все это с помощью одного запроса и возвращает таблицу результатов, перечисляя нулевое количество вызовов с ним и исключая весь ручной бит Excel, поскольку он не слишком эффективен и подвержен человеческим ошибкам.