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
我想列出每个帐户 (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