2

我有以下 SOQL 查询来显示我的页面块表中的 ABC 列表。

Public List<ABC__c> getABC(){
    List<ABC__c> ListABC = [Select WB1__c, WB2__c, WB3__c, Number, tentative__c, Actual__c, PrepTime__c, Forecast__c from ABC__c ORDER BY WB3__c];
    return ListABC;
}

显示所有行

如上图所示,WB3 有 A、B 和 C 的记录数。但我想根据 Actual__c 为每个 WB3 组仅显示 1 条记录。每个 WB3 组只能显示最新的 Actual__c。

即,理想情况下,在此示例中,我只想显示 3 行(A、B、C 各一行)。

为此,我使用了 GROUPBY 并使用 AggregateResults 显示结果。这是结果。

最大实际日期和最大暂定日期

如上所示,我得到了每个 WB3 的最新实际日期。但暂定日期不对应。暂定日期也是列表中的 MAX。

这是我使用的代码

public List<SiteMonitoringOverview> getSPM(){
        AggregateResult[] AgR = [Select WB_3__c, MAX(Tentaive_Date__c) dtTentativeDate , MAX(Actual_Date__c) LatestCDate FROM Site_progress_Monitoring__c GROUP BY WBS_3__c];

        if(AgR.size()>0){                    

            for(AggregateResult SalesList : AgR){                                                        
                CustSumList.add(new SiteMonitoringOverview(String.ValueOf(SalesList.ge​t('WB_3__c')), String.valueOf(SalesList.get('dtTentativeDate')), String.valueOF(SalesList.get('LatestCDate')) ));            
            }    
        }
        return CustSumList;
    }

我被迫使用MAX()暂定日期。我想要MAX实际日期的相应暂定日期。不是最大暂定日期。

对于 A 组,暂定日期为Max Actual Date is 12/09/2012。但它正在显示MAX tentative date: 27/02/2013. 它应该显示12/09/2012. 这是因为我MAX(Tentative_Date__c)在我的代码中使用。SOQL 查询中的每一列都必须是GROUPEDAGGREGATED。这很奇怪。

在此示例中如何获得所需的 3 行?

有什么建议么?任何不同的方法(在组内循环)?如何?

4

1 回答 1

1

我自己也遇到了这个问题。我想出的解决方案只有在您想要每个分组中最旧或最新的记录时才有效。不幸的是,它可能不适用于您的情况。我仍然会将其留在这里,以防它确实可以帮助某人寻找解决此问题的方法。

AggregateResult[] groupedResults = [Select Max(Id), WBS_3__c FROM Site_progress_Monitoring__c GROUP BY WBS_3__c];

Id上调用MAXMIN将使您获得每个组条件的 1 条记录。然后您可以查询其他信息。在我的情况下,我只需要每组中的 1 条记录,并不真正关心它是哪一条。

于 2013-08-29T20:34:18.470 回答