sql查询

cdmah0mi  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(342)

我想列出每个帐户(filteredaccount)最近的活动(来自filteredactivitypointer)。问题是,这些活动并没有直接链接到account,而是在它们之间有联系人。因此帐户可以有多个联系人。多个联系人可以有多个活动。
完整实体模型

问题:如何检索每个帐户最近的活动?
我尝试了以下操作(使用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

联系和活动之间的关系是使用regardingobjectid和regardingobjecttypecode建模的
我的问题是上面的查询列出了每个联系人的最新活动,而不是每个帐户。如何确定一个帐户的所有联系人的最近活动?

wj8zmpe1

wj8zmpe11#

这也许更简单 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

相关问题