I am trying to come with some logic to figure out what Opportunities have progressed in a week. One thing I was thinking of doing was getting the latest and earliest stages for the Opportunities from the Opportunity History table.

Then comparing the stages and this will indicate if an Opportunity has progressed or not.

So, do get the latest. I could do something like:

SELECT Amount, CloseDate, CreatedById, CreatedDate, IsDeleted, ExpectedRevenue, 
Id, OpportunityId, Probability, StageName, SystemModstamp, ForecastCategory 
FROM OpportunityHistory
WHERE OpportunityId = 'blah'
order by createdDate desc limit 1 

However, I need to do this for all Opportunities that belong to a certain bunch of Users. I am not sure how to do this. Any tips?


2 Answers 2


I would try it so:

First i would select a users, and then opportunity history.

List<Account> acc = [ Select Id From Account Where CreatedDate = LAST_WEEK ];

List<OpportunityHistory> oppHistory = [ Select OpportunityId, CloseDate, Amount 
                                        From OpportunityHistory
                                        Where Opportunity.AccountId IN :acc ];

I ended up doing it by:

List<Opportunity> opps = [SELECT id, Probability, LastModifiedDate, OwnerId, Amount,
            (SELECT StageName,Probability,SystemModstamp FROM OpportunityHistories order by SystemModstamp desc) oppHistory
            FROM Opportunity 
            where LastModifiedDate = LAST_N_DAYS:7];

and then looping throu OpportunityHistory information for the Opportunities.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .