SQL 查询 DynamicsCRM 每个帐户的所有联系人最近 activity

SQL Query for DynamicsCRM Most recent activity over all contact per account

我想列出每个帐户 (FilteredAccount) 最近的 activity(来自 FilteredActivityPointer)。 问题是活动不直接链接到帐户,而是在两者之间有联系。因此帐户可以有多个联系人。多个联系人可以有多个活动。

完整实体模型

问题:如何检索每个帐户的最新 activity?

我尝试了以下方法(使用 SQL Server 2016,Transact SQL):

SELECT *
FROM FilteredContact co cross apply
    (SELECT TOP 1 *
    FROM FilteredActivityPointer fa
    where fa.regardingobjectid = co.contactid and fa.regardingobjecttypecode=2
    order by fa.actualend desc
) fa
JOIN FilteredAccount ac on ac.accountid = co.accountid 
JOIN FilteredOpportunity opp on opp.accountid = ac.accountid and opp.statecode=0

contact 和 activity 之间的关系是使用 regardingobjectid 和 regardingobjecttypecode

建模的

我的问题是上面的查询列出了每个联系人的最新 activity,而不是每个帐户。 如何确定一个帐户的所有联系人中最近的activity?

row_number() 可能比 cross apply 更简单:

select *
from (
    select *, row_number() over(partition by ac.accountid order by fa.actualend desc) rn
    from FilteredContact co 
    inner join FilteredActivityPointer fa
        on  fa.regardingobjectid = co.contactid 
        and fa.regardingobjecttypecode = 2
    inner join FilteredAccount ac 
        on  ac.accountid = co.accountid 
    inner join FilteredOpportunity opp 
        on  opp.accountid = ac.accountid 
        and opp.statecode = 0
) t
where rn = 1