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, но оно ускользает от меня прямо сейчас (в конце концов, сегодня воскресное утро, а я только что позавтракал!).