ページ ブロック テーブルに ABC のリストを表示する次の SOQL クエリがあります。
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 ごとに 1 行ずつ) のみを表示したいと考えています。
このために、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()
仮デートに使わざるを得ない。MAX Actual Date に対応する仮の日付が欲しいです。最大暫定日ではありません。
グループ 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 行を取得するにはどうすればよいですか?
助言がありますか?別のアプローチ (グループ内でループ) はありますか? どうやって?