我有以下 SOQL 查询来显示我的页面 block 表中的 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 的最新实际日期,如上所示。但暂定日期与此不符。暂定日期也是列表中的最大日期。
这是我使用的代码
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.get('WB_3__c')), String.valueOf(SalesList.get('dtTentativeDate')), String.valueOF(SalesList.get('LatestCDate')) ));
}
}
return CustSumList;
}
我被迫使用MAX()
作为暂定日期。我想要最大实际日期对应的暂定日期。不是最大暂定日期。
对于 A 组,最大实际日期的暂定日期为 12/09/2012
。但它显示最大暂定日期:27/02/2013
。它应该显示 12/09/2012
。这是因为我在代码中使用了 MAX(Tentative_Date__c) 。 SOQL 查询中的每一列都必须是 GROUPED
或 AGGREGATED
。这很奇怪。
如何获得本例中所需的 3 行?
有什么建议吗?有什么不同的方法(分组内循环)?怎么办?
最佳答案
我自己也遇到了这个问题。我提出的解决方案仅在您想要每个分组中最旧或最新的记录时才有效。不幸的是,它可能不适用于您的情况。我仍然会将其留在这里,以防它确实可以帮助某人寻找此问题的解决方案。
AggregateResult[] groupedResults = [Select Max(Id), WBS_3__c FROM Site_progress_Monitoring__c GROUP BY WBS_3__c];
在Id上调用MAX或MIN将使您获得每个组条件1条记录。然后就可以查询其他信息了。就我而言,我只需要每组中的 1 条记录,并且并不真正关心它是哪一条。
关于max - SOQL - 每组单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099196/