Seems to me you need to perform a second query to deal with that. This second query probably needs to be dynamic, using clauses that are generated from the "maxID" instance's values for ea_System__c, ae_BusinessLine_Code__c and ea_CustomerId__c, something like the following (I've made assumptions about datatypes as you didn't provide schema detail):
AggregateResult[] aggregateResults = ...; // Your query here
String query = 'SELECT Name, ea_System__c, ea_BusinessLine_Code__c, ea_CustomerId__c, CreatedDate FROM ea_SystemCodes__c WHERE ';
String orderBy = ' ORDER BY ea_System__c, ea_BusinessLine_Code__c, ea_CustomerId__c';
String[] conditions = new String[0];
for (AggregateResult result : aggregateResults) {
String systemValue = String.escapeSingleQuotes((String) result.get('ea_System__c'));
String bizCode = String.escapeSingleQuotes((String) result.get('ea_BusinessLine_Code__c'));
String customerId = String.escapeSingleQuotes((String) result.get('ea_CustomerId__c'));
// Need a sequence of WHERE condition clauses that select exact matches for the
// found combinations of system, biz code and customer ID
conditions.add('(ea_System__c = \'' + systemValue + '\' AND ' +
'ea_BusinessLine_Code__c = \'' + bizCode + '\' AND ' +
'ea_CustomerId__c = \'' + customerId + '\')');
}
query += String.join(conditions, ' OR ') + orderBy;
// Execute the generated query
ea_SystemCodes__c[] duplicateCodes = Database.query(query);
At this point you should have all the duplicates in groupings (including those returned as "maxID" values) because of the group by clause.
It is worth noting that if there are too many unique duplicate combinations of these three parameters the query generation could exceed the maximum length of an SOQL query statement (which is 100K).