Salesforce-Apex-基于活动历史记录查询帐户

Salesforce-Apex-基于活动历史记录查询帐户,salesforce,subquery,soql,apex,Salesforce,Subquery,Soql,Apex,嘿,销售人员专家们 我有一个关于如何高效查询帐户信息的问题。我想根据activityHistory对象中的更新查询帐户。我遇到的问题是,无论是否有完整的activeHistory,都会检索所有帐户。那么,有没有一种方法可以编写此查询,以便仅检索具有activeHistory且状态为complete的帐户,并键入_for_reporting='QRC' List<Account> AccountsWithActivityHistories = [ SELECT

嘿,销售人员专家们

我有一个关于如何高效查询帐户信息的问题。我想根据activityHistory对象中的更新查询帐户。我遇到的问题是,无论是否有完整的activeHistory,都会检索所有帐户。那么,有没有一种方法可以编写此查询,以便仅检索具有activeHistory且状态为complete的帐户,并键入_for_reporting='QRC'

List<Account> AccountsWithActivityHistories = [    
    SELECT
         Id
        ,Name
        ,( SELECT
                ActivityDate
               ,ActivityType
               ,Type_for_Reporting__c
               ,Description
               ,CreatedBy.Name
               ,Status
               ,WhatId
            FROM ActivityHistories
            WHERE Status ='complete'  and Type_for_Reporting__c = 'QRC'
        )
    FROM Account
];

您在历史记录上有一个WHERE子句,但在帐户级别上仍然缺少一个WHERE子句

例如,这将只返回具有联系人的帐户:

SELECT Id, Name
FROM Account
WHERE Id IN (SELECT AccountId FROM Contact) // try with NOT IN too
对于活动来说,这更为棘手,因为他们不喜欢以这种方式被用在任何地方

子查询中当前不支持以下对象:

活动历史 附件 事件 活动参与者 笔记 开放活动 标记AccountTag、ContactTag和所有其他标记对象 任务 此外,定义底部的细字也有点令人沮丧

对没有“查看所有数据”权限的用户的以下限制有助于防止性能问题:

在关系查询的main子句中,只能引用 一张唱片。例如,您不能筛选 账户名称以“A”开头;相反,您必须引用单个 账户记录。 不能使用WHERE子句。 必须为列表中返回的行数指定499或更少的限制。 您必须在ActivityDate上按升序排序,在LastModifiedDate上按降序排序;最后可以显示空值。对于 示例:ORDER BY ActivityDate ASC最后为空,LastModifiedDate DESC。 看起来您需要多个查询。转到任务或事件(取决于哪个自定义字段可见),组成一组AccountID,然后查询帐户

或者,您可以手动筛选原始查询中的列表,将帐户复制到帮助者列表:

List<Account> finalResults = new List<Account>();
for(Account a : [SELECT...]){
    if(!a.ActivityHistories.isEmpty()){
        finalResults.add(a);
    }
}