2015-09-15 2 views
0

У меня есть таблица, содержащая элементы кампании с более чем 200 тыс. Записей. У нас есть проблема, когда разные контакты используют один и тот же адрес электронной почты, но подписываются на разные кампании. Мне нужно идентифицировать любые контакты, у которых есть дубликат электронной почты другому контакту, но не подписываются на один и тот же набор кампаний. Есть 100 различных кампаний, и контакт может подписаться на них всех. В таблице содержится много полей, но мне нужны электронные письма, которые могут использоваться несколькими контактами, Contact_ID, который уникален и чувствителен к регистру, и Campaign_ID, который уникален и чувствителен к регистру, но может быть назначен нескольким контактам.Идентифицировать членов кампании с повторяющимися письмами

+----------------------+------------+------------+-----------+-------------+---------------+ 
|  Email   | Contact_ID | First_Name | Last_Name | Campaign_ID | Campaign_Name | 
+----------------------+------------+------------+-----------+-------------+---------------+ 
| [email protected]  | 300ABC  | John  | Smith  | 100xyz  | Campaign 1 | 
| [email protected]  | 300abc  | Mary  | Smith  | 100wyz  | Campaign 2 | 
| [email protected] | 300Abc  | Jim  | Jones  | 100xyz  | Campaign 1 | 
| [email protected] | 300Abc  | Jim  | Jones  | 100Wyz  | Campaign 3 | 
| [email protected] | 300abC  | Jane  | Jones  | 100xyz  | Campaign 1 | 
| [email protected] | 300abC  | Jane  | Jones  | 100Wyz  | Campaign 3 | 
| [email protected] | 300abC  | Jane  | Jones  | 100Ayz  | Campaign 4 | 
+----------------------+------------+------------+-----------+-------------+---------------+ 

По примеру Джим и Джейн Джонс разделяют адрес электронной почты и подписаться на 5 кампаний 2 являются одинаковыми, но Джейн также Присоединяется к кампании 4. Мне нужно скрипт, который идентифицирует Джим и Джейн, поскольку они разделяют по электронной почте, но не подписывайтесь на один и тот же набор кампаний. Конечная цель заключается в том, что мы удаляем адрес электронной почты от одного контакта, но гарантируем, что они подписаны на все кампании.

+2

Вы использовали 'distinct',' group by' и 'having' раньше? В частности, последние 2 вместе? – Drew

+0

Мои знания SQL очень просты. Я использовал различную и группу, но никогда не имел. –

+0

Хорошо, я подожду немного, кто-то ответит, иначе я буду – Drew

ответ

0

Я думаю, что вы можете сделать это с group_concat():

select email, group_concat(firstname, ' ', lastname) as commonnames 
from (select email, firstname, lastname, 
      group_concat(distinct campaign_id order by campaign_id) as campaigns 
     from table t 
     group by email, firstname, lastname 
    ) en 
group by email 
having count(*) > 1 and min(campaigns) <> max(campaigns); 

подзапрос получает список кампаний для данного контакта (на основе имен, вы могли бы иметь другие критерии). Затем внешний запрос выбирает электронные письма с несколькими лицами, в которых кампании не совпадают.

+0

Электронная почта Джима Джонса, а электронная почта Jim Jones (идентичная) может быть двух человек. Jim # 2 - Jim Jr. – Drew

+0

Как сказал @drew, Джим Джонс может быть разными людьми, а contact_id - это уникальный идентификатор. Проблема с ним заключается в том, что его нужно считать чувствительным к регистру, поскольку в соответствии с примером в таблице символы, составляющие идентификатор, могут быть одинаковыми для разных контактов, а только некоторые из них - это верхний или нижний регистр –

+0

слово 'just 'является плохо избранным в этом затруднительном положении. М.Мильбурн. На самом деле слово должно быть удалено с английского языка, потому что говорящий из него означает «это должно быть легко, сделайте это», а слушатель, например, «О, действительно?». Я получаю удовольствие от этого каждый день, когда сталкиваюсь с людьми :) – Drew

Смежные вопросы