计算每个销售机会的最后一个Campaign响应

时间:2018-03-19 16:39:20

标签: sql

我有以下表格:机会,帐户,联系人,CampaignMember和Campaign。

erd

对于每一个机会,我想用SQL找出组装表:?什么是所带来的机遇前的最后活动响应:我们称之为“最后触摸”广告系列< / p>

要做到这一点,我们必须从商机开始,查看相关帐户,查看与此帐户相关的所有联系人,并使用最新 ResponseDate返回此帐户的CampaignMember这是之前的Opportunity.CreatedDate。

输出应包含3列:机会ID,最后触摸广告系列ID和最后触摸广告系列类型。

实施例: erd-example

对于商机号1,CampaignMember ID 3的最新响应日期之前商机CreatedDate。

对于Opportunity ID 2,CampaignMember ID 4具有机会创建日期之前的最新响应日期。我们必须忽略在创建商机后发生的广告系列成员回复。

在我们的示例中,恰好相同的广告系列是在创建商机之前的“最后触摸”。

1 个答案:

答案 0 :(得分:0)

有点难看,但似乎工作(在数据库小提琴上测试 - 更改名称,请更正你的基础)。

select dt.id, campaign.id as LastTouchId, campaign.type as LastTouchType from (
    select opportunity.id, max(ct.responsedate) as responsedate from opportunity
        left join account on account.id = opportunity.account_id
        left join (select contact.account_id, campaignmember.responsedate from
        contact inner join campaignmember on campaignmember.id = contact.campaignmember_id) 
        as ct on ct.account_id = account.id and ct.responsedate < opportunity.createddate
        group by opportunity.id) as dt
    inner join account on account.id = dt.id
    inner join contact on contact.account_id = account.id
    inner join campaignmember on campaignmember.id = contact.campaignmember_id and 
    campaignmember.responsedate = dt.responsedate
    inner join campaign on campaign.id = campaignmember.campaign_id