Выберите минимальное время для одного и того же идентификатора из двух таблиц (MySQL) - PullRequest
0 голосов
/ 16 декабря 2018

Привет, у меня есть две таблицы и для одного и того же контактного «электронного адреса» в двух таблицах, я хочу знать, когда первый раз «электронное письмо» соприкасается.

разговор_и_ид enter image description here

контакт

enter image description here

Ожидаемый результат
enter image description here

До сих пор я только сделал внешнее объединение, чтобы соединить две таблицы, но оно удалило дублированное «электронное письмо», которое мне нужно, чтобы сравнить разницу во времени с тем же «электронным письмом»,

ALTER TABLE conversation_and_id CHANGE `email` `conversation_and_id_email` VARCHAR(100);

create table conversation_and_id_and_contact
SELECT *
FROM contact AS con
LEFT JOIN conversation_and_id AS ci ON con.email = ci.conversation_and_id_email
UNION
SELECT *
FROM contact AS con
RIGHT JOIN conversation_and_id AS ci ON con.email = ci.conversation_and_id_email;

create table final
select 
if (f.email is not null, f.email, f.conversation_and_id_email) as email1,
if (f.atlas_interest is not null, f.atlas_interest, f.created_at) as time1,
if (f.conversation_and_id_email is not null, f.conversation_and_id_email, f.email) as email2,
if (f.created_at is not null, f.created_at, f.atlas_interest) as time2
from conversation_and_id_and_contact f;

1 Ответ

0 голосов
/ 16 декабря 2018

Стандартное решение везде - выполнить полное внешнее объединение с обеими таблицами и получить отметку времени MIN().

Однако, поскольку MySQL (пока) не поддерживает полные внешние объединения, вам нужно объединитьсялевый и правый соединяются, чтобы получить желаемый результат.Окончательный [неоправданно длинный] запрос выглядит так:

select
  coalesce(iemail, cemail) as email,
  least(created_at, atlas_interest) as expressed_interest_at
from (
  select -- this is the left join
    i.email as iemail, i.created_at, c.email as cemail, c.atlas_interest
  from conversation_and_id i
  left join contact c on c.email = i.email
  union
  select -- this is the right join
    i.email as iemail, i.created_at, c.email as cemail, c.atlas_interest
  from conversation_and_id i
  right join contact c on c.email = i.email
) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...