我有以下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的记录数,但我希望每个WB3组基于Actual__c只显示一条记录,每个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组为Max Actual Date is 12/09/2012的暂定日期。但是它正在显示MAX tentative date: 27/02/2013。它应该显示12/09/2012。这是因为我在代码中使用了MAX(Tentative_Date__c)。SOQL查询中的每一列都必须是GROUPED或AGGREGATED。这太奇怪了。
如何在本例中获得所需的3行?
有什么建议吗?是否有不同的方法(分组内循环)?多么?
发布于 2013-08-29 20:34:18
我自己也遇到了这个问题。我想出的解决方案只有在您希望从每个分组中获得最古老的或最新的记录时才有效。不幸的是,这在你的情况下可能行不通。我仍然会把这个留在这里,以防它碰巧帮助某人寻找解决这个问题的方法。
AggregateResult[] groupedResults = [Select Max(Id), WBS_3__c FROM Site_progress_Monitoring__c GROUP BY WBS_3__c];在Id上调用MAX或MIN将使您在每个组条件下获得1条记录。然后,您可以查询其他信息。我,我的案子,我只需要从每一组记录,而不是真正关心它是哪一个。
https://stackoverflow.com/questions/14099196
复制相似问题