The instance list is sorted by the date and time when the report was run. Report results are stored for a rolling 24-hour period. During this time, based on your user access level, you can access results for each instance of the report that was run.
You can get the instance list by calling the ReportManager.getReportInstances method. For example:
// Get the report ID List <Report> reportList = [SELECT Id,DeveloperName FROM Report where DeveloperName = 'Closed_Sales_This_Quarter']; String reportId = (String)reportList.get(0).get('Id'); // Run a report asynchronously Reports.ReportInstance instance = Reports.ReportManager.runAsyncReport(reportId, true); System.debug('List of asynchronous runs: ' + Reports.ReportManager.getReportInstances(reportId));