function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Miles Sonnenfeld 2Miles Sonnenfeld 2 

apex soql get minimum date from group of records

I am trying to get the minimum date from sevral records.  My code has no Problems, but when I attempt to run I get an error...Please help as I am not sure why I can select a string using SOQL, but not a Date.

"Line: 7, Column: 1
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, AfterTenantOpp: execution of AfterInsert caused by: System.StringException: Ending position out of bounds: 4 Class.TenantOpp_CarrierLeaseComplete.CarrierExecution: line 21, column 1 Trigger.AfterTenantOpp: line 24, column 1: []"

My Trigger...
trigger AfterTenantOpp on Tenant_Opportunities__c (after insert) {

    for(Tenant_Opportunities__c  TO:trigger.new) {
        String Recordid = TO.Id;
        String SiteID = TO.Site_ID__c;
        String Carrier = TO.Carrier_Tenant__c;
        Integer Count =[SELECT count() 
                        FROM Tenant_Opportunities__c 
                        WHERE Carrier_Tenant__c=:Carrier AND Site_ID__c =: SiteID];
        
        List<Site_ID__c> OppIDList = [SELECT Opportunity__c
                        			  FROM Site_ID__c
                        			  WHERE Id=:SiteID];
        String OppID = string.valueof(OppIDList[0]);
        
system.debug('RecordId: '+Recordid);
system.debug('SiteID: '+SiteID);
system.debug('Carrier: '+Carrier);
system.debug('Count: '+Count);
        TenantOpp_ProjectExt.NewProjectExt(Recordid, SiteID, Carrier, Count);
        TenantOpp_CarrierNumber.CarrierNumber(Recordid, SiteID, Carrier, Count);
        TenantOpp_CarrierLeaseComplete.CarrierExecution(Recordid, SiteID, Carrier, OppID);
  }
}

My Class....
 
public class TenantOpp_CarrierLeaseComplete {
    public static void CarrierExecution(String Recordid, String SiteID, String Carrier, String OppID){
        List<Tenant_Opportunities__c> CarrierLeaseCompleteList = [SELECT Carrier_Lease_Complete__c
                                         						  FROM Tenant_Opportunities__c
                                         						  WHERE Carrier_Lease_Complete__c != null AND Site_ID__c=:SiteID AND Carrier_Tenant__c=:Carrier
                                                                  ORDER BY Carrier_Lease_Complete__c LIMIT 1];
		String StringDateComplete = string.valueof(CarrierLeaseCompleteList[0]);
        system.debug('StringDateComplete: '+StringDateComplete);
		String DateYear = StringDateComplete.substring(51,4);  
        system.debug('DateYear: '+DateYear);
    }
}

 
Best Answer chosen by Miles Sonnenfeld 2
Miles Sonnenfeld 2Miles Sonnenfeld 2
I figured it out!
 
public class TenantOpp_CarrierLeaseComplete {
    public static void CarrierExecution(String Recordid, String SiteID, String Carrier, String OppID){
        List<Tenant_Opportunities__c> CarrierLeaseCompleteList = [SELECT Carrier_Lease_Complete__c
                                         						  FROM Tenant_Opportunities__c
                                         						  WHERE Carrier_Lease_Complete__c != null AND Site_ID__c=:SiteID AND Carrier_Tenant__c=:Carrier
                                                                  ORDER BY Carrier_Lease_Complete__c LIMIT 1];
		String StringDateComplete = string.valueof(CarrierLeaseCompleteList[0]);
        system.debug('StringDateComplete: '+StringDateComplete);
		String DateYear = StringDateComplete.substring(51,55);
        Integer IntDateYear = integer.valueof(DateYear);
        String DateMonth = StringDateComplete.substring(56,58);
        Integer IntDateMonth = integer.valueof(DateMonth);
        String DateDay = StringDateComplete.substring(59,61);
        Integer IntDateDay = integer.valueof(DateDay);
        system.debug('Integer Date: '+IntDateYear+'-'+IntDateMonth+'-'+IntDateDay);
        
        Date CarrierLeaseComplete = date.newInstance(IntDateYear,IntDateMonth,IntDateDay);
        system.debug('CarrierLeaseComplete: '+CarrierLeaseComplete);
    }
}