【问题标题】:SQL - Question about Salesforce table - Link Event with TaskSQL - 关于 Salesforce 表的问题 - 将事件与任务链接
【发布时间】:2020-01-16 16:05:36
【问题描述】:

salesforce_event 中,我们有 created_dateaccount_idwho_id。在 salesforce_task 中,我们有 created_dateclose_dateaccount_idwho_id

eventtask 可以加入account_id(如果可用)或who_id。所以看起来需要有 2 个左连接。

如果 task 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

谢谢!

【问题讨论】:

  • 所以 account_id 在相同情况下为 NULL,如果 account_id 不是,那么 who_id 将为 NULL 对吗? (反之亦然)
  • @RonakDhoot 实际上 who_id 永远不会为空——我们只想在 account_id 可用时使用它

标签: sql salesforce amazon-redshift correlated-subquery


【解决方案1】:

所以,你可以这样尝试,而不是两个左连接

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

【讨论】:

    【解决方案2】:

    您配置连接的方式将执行以下操作:

    对于给定的 salesforce_event 记录,您将获得具有相同 who_id 的所有 salesforce_task 记录,然后您将获得所有可用 account_id 的每个 salesforce_task 记录。因此,如果 1 个 salesforce_event id 与 20 个 account_ids 和 30 个 who_ids 相关联,您将获得 600 条记录。您没有将 account_id 与 who_id 联系起来。那是你要的吗?在我看来有点荒谬,但我不知道内容。你做。

    【讨论】:

    • 如果一个事件可以通过 account_id 链接到一个任务,那么我想使用该 account_id 的任务的 min(created_date) 来获取任务 created_date 和事件创建日期之间的天数。如果一个事件只能通过 who_id 链接到一个任务,那么我使用该 who_id 的任务的 min(created_date) 来获取天数。
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多