List caseList = new List(); List CaseHistoryList = new List(); Map caseIdMap = new Map(); //Querying Case Records here for(Case cs: [SELECT Id, Status FROM Case]){ caseList.add(cs); } if(caseList.size() > 0){ //Querying history for Case CaseHistoryList = [SELECT newValue, createdDate, OldValue, CaseId FROM CaseHistory WHERE CaseID IN :caseList AND Field = 'Status']; System.debug('CaseHistoryList: '+CaseHistoryList); if(CaseHistoryList.size() > 0){ for(CaseHistory csHis : CaseHistoryList){ if(csHis.newValue == 'New'){ caseIdMap.put(csHis.caseId, csHis.CreatedDate.date()); System.debug('CaseHistory Map: '+caseIdMap); } } } if(caseIdMap.size() > 0){ for(Case updateCase : [SELECT Id, ClosedDate__c, NewStatusDate__c, EscalateDate__c, InProgressDate, OnHoldDate__c Status FROM Case WHERE ID in :caseIdMap.keyset()]){ //Need to populate date field for each status. } } } Map caseMap = new Map(); Map caseIdMap = new Map(); for(Case cs: [SELECT Id, Status FROM Case]) { caseMap.put(cs.ID, cs); } if(caseMap.size() > 0) { for(CaseHistory caseHistory : [SELECT newValue, createdDate, OldValue, CaseId FROM CaseHistory WHERE CaseID IN : caseMap.keySet() AND Field = 'Status']) { if(caseHistory.newValue == 'New' && caseMap.containsKey(caseHistory.CaseID)) { /*caseMap.get(caseHistoryMap.get(caseHistory.CaseID).ClosedDate__c = caseHistory.??? caseMap.get(caseHistoryMap.get(caseHistory.CaseID).NewStatusDate__c = . caseMap.get(caseHistoryMap.get(caseHistory.CaseID).EscalateDate__c caseMap.get(caseHistoryMap.get(caseHistory.CaseID).InProgressDate caseMap.get(caseHistoryMap.get(caseHistory.CaseID).OnHoldDate__c caseMap.get(caseHistoryMap.get(caseHistory.CaseID).Status*/ } } }