Как то так?Не проверено, но по этим направлениям.Возможно, вам придется запустить его несколько раз или добавить свой собственный фильтр в учетные записи, чтобы каким-то образом нарезать данные.
List<Asset> toDelete = new List<Asset>();
for(Account acc : [SELECT Id,
(SELECT ProductCode
FROM Assets
WHERE ProductCode != null AND RecordType.Name = 'Internal' and IsActive__c = true
ORDER BY LastModifiedDate DESC)
FROM Account
WHERE Id IN (SELECT AccountId FROM Asset WHERE ProductCode != null AND RecordType.Name = 'Internal' and IsActive__c = true)
LIMIT 1000]){
Set<String> productCodes = new Set<String>();
for(Asset a : acc.Assets){
if(productCodes.contains(a.ProductCode)){
toDelete.add(a);
} else {
productCodes.add(a.ProductCode);
}
}
}
delete toDelete;
Возможно, вы можете немного упростить его, насколько я помню, set.add
возвращает логическое выражение, говорящее о том, что коллекция имеетизменено в результате добавления.