1

次のフィールドを持つtrans__cというオブジェクトをクエリする必要があります

 id,
 scantime__c // datetime
 name
 asset__c // external id
 status

ステータスが保留中のデータのみを取得する必要があり、繰り返しのアセットがある場合は、スキャンタイムを最新として記録のみを取得する必要があります。

例えば

3つのレコードがある場合

   asset         name      scantime              Status

    1            Rec 1      17-dec-2011 13:10     Pending
    1            Rec2       17-dec-2011 13:50     Pending
    2            Rec3       17-dec-2011 13:10     Pending

クエリの出力は次のようになります

    1            Rec2       17-dec-2011 13:50     Pending
    2            Rec3       17-dec-2011 13:10     Pending
4

2 に答える 2

1

Group By は、実際には集計クエリでのみ使用するためのものです。これは、集計したくない他のフィールドに関しては少し面倒です。

これは正しいアプローチではないかもしれませんが、すべての「保留中」レコードを取得してから、コードでロジックを実行します (大量の結果ではない場合)。

map<integer, Trans__c> mapAssetToRecord = new map<integer, Trans__c>();

for(Trans__c [] sTransArr : [select Id, Name, Asset__c, Scan_Time__c, Status__c
                               from Trans__c
                              where Status__c = 'Pending'])
{
    for(Trans__c sTrains : sTransArr)
    {
        if(mapAssetToRecord.get(sTrans.Asset__c) == null)
        {
            mapAssetToRecord.put(sTrans.Asset__c, sTrans);
        }
        else if(sTrans.Scan_Time__c > mapAssetToRecord.get(sTrans.Asset__c).Scan_Time__c)
        {
            mapAssetToRecord.put(sTrans.Asset__c, sTrans);
        }
    }
}

// now mapAssetToRecord includes all of the records you want

巧妙な SOQL を使用した、より洗練されたソリューションがあるかもしれませんが、今はそれを回避できます (結局のところ、日曜日の朝で、朝食を食べたばかりです!)。

于 2011-12-17T23:43:55.653 に答える
1

クエリは次のようになります。

SELECT Id, MAX(scantime__c), Name, asset__c, status
FROM trans__c WHERE status = 'Pending' 
GROUP BY Id, Name, asset__c, status

乾杯

[編集]

集約クエリは、省略したい追加の行を返すように見えるので、おそらくレイシーが提案しているものの方がうまくいくでしょう. しかし、集計適切に適用すると非常に便利です。幸運を。

于 2011-12-17T23:45:56.370 に答える