2

ページ ブロック テーブルに 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.ge​t('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 行を取得するにはどうすればよいですか?

助言がありますか?別のアプローチ (グループ内でループ) はありますか? どうやって?

4

1 に答える 1

1

自分でこの問題に遭遇しました。私が思いついた解決策は、各グループから最も古いレコードまたは最新のレコードが必要な場合にのみ機能します。残念ながら、あなたの場合はおそらくうまくいきません。この問題の解決策を探している人に役立つ場合に備えて、ここに残しておきます。

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

IdでMAXまたはMINを呼び出すと、グループ条件ごとに 1 つのレコードを取得できます。その後、他の情報を照会できます。私の場合、各グループから 1 つのレコードが必要であり、それがどれであるかはあまり気にしませんでした。

于 2013-08-29T20:34:18.470 に答える