SQL - Вопрос о таблице Salesforce - Связать событие с задачей - PullRequest
0 голосов
/ 16 января 2020

В salesforce_event, у нас есть created_date, account_id и who_id. В salesforce_task у нас есть created_date, close_date, account_id и who_id.

event и task могут быть объединены либо account_id (если имеется) или who_id. Похоже, что будет необходимо 2 соединения.

Я хочу получить дни между событием created_date и заданием created_date, если задача close_date в течение последних 30 дней, когда создается событие .

Существует ли эффективный способ достижения этого? То, что у меня есть, ниже, и оно работает вечно, а также, кажется, неправильно

select 
se.id,
min(se.created_date) - min(coalesce(st1.close_date,st.close_date))
from salesforce_event se
left join salesforce_task st on se.who_id = st.who_id and st.close_date  >= se.created_date - 30 and st.close_date <= se.created_date
left join salesforce_task st1 on se.account_id = st1.account_id and  st1.close_date  >= se.created_date - 30 and st1.close_date <= se.created_date group by 1

Спасибо!

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Итак, вместо двух оставшихся соединений вы можете попробовать это так

SELECT 
se.id,
se.created_date - st.close_date
FROM salesforce_event AS se
LEFT JOIN salesforce_task AS st ON (se.account_id = st.account_id OR se.who_id = st.who_id) AND st.close_date >= se.created_date - 30
0 голосов
/ 16 января 2020

Способ, которым вы настроили объединения, будет делать следующее:

Для данной записи salesforce_event вы получите все записи salesforce_task с тем же who_id, а затем вы получите каждую запись salesforce_task для всех avialable account_id , Таким образом, если 1 идентификатор salesforce_event связан с 20 account_ids и 30 who_ids, вы получите 600 записей. у вас нет ничего, что связывает account_id с who_id. Это то, что вы хотите? Это кажется мне немного бессмысленным, но я не знаю содержания. вы делаете.

...