Hello Anotnino, This will work dynamicaly for whatever the list size is but only takes top 5 and bottom 5 of the record A assuming record A is located at the center of the list. therefore, its always average of 10 numbers.
list<objecttype> recordsfetched=new list<objecttype>();
recordsfetched=[select fieldA,FieldB from object order by FieldB desc];
integer sumoftopfivenumbers=0;
integer sumofbelowfivenumbers=0;
integer avg=0;
integer mid=0;
if(recordsfetched.size()!=NULL&&recordfetched.size()>=10){
//deciding on the position of Record A based on size of list
if(recordsfetched.size()%2==0){
mid=recordsfetched/2;
}
else{
mid=(recordsfetched+1)/2;
}
//calculates sum of top 5 numbers of A record
for(integer i=mid-1;i<=mid-5 ;i--){
sumoftopfivenumbers=(recordsfetched[i].fieldA)+sumoftopfivenumbers;
}
//calculates sum of bottom 5 numbers of A record
for(integer i=mid+1;i<=mid+5;i++)
{
sumofbelowfivenumbers=(recordsfetched[i].fieldA)+sumofbelowfivenumbers;
}
//calculates average of top 5 and below 5 of record A
avg=(sumoftopfivenumbers+sumofbelowfivenumbers)/10;
//places average value in fieldA which is the mid value of the list
recordsfetched[mid].feildA=avg;
}
Hope this helps, Mark it as solved if it did.
Thanks,Sarvani
5 respostas