SOQL - 每组单行

时间:2012-12-31 08:16:12

标签: max row limit soql

我有以下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;
}

All Rows Displayed

正如您在上图中所看到的,WB3具有A,B和C的记录数。但是我想根据Actual__c仅为每个WB3组显示1条记录。每个WB3组只能显示最新的Actual__c。

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

为此,我使用了GROUPBY并使用AggregateResults显示结果。结果如下。

Max Actual Date and Max Tentative Date

我得到了每个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实际日期的相应暂定日期。不是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行?

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

1 个答案:

答案 0 :(得分:1)

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

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

ID 上调用 MAX MIN 可让您获得每组条件1条记录。然后,您可以查询其他信息。我的情况我只需要每组中的1条记录,并不关心它是哪一条。