Not with CR 8. OK, there is a method, however you'll want to be careful and realize that you cannot pas any parameters or pass filtering ot the database.
Using th ADO or RDO connection there is an option to paste in a query, which if your SQL is string, you can write this out in a SELECT, or et your dba to assist you.
Using crystal all you cano is filter the rows.
Group by the ID.
Use Report->Selection formula->Record and palce:
count({table.field},{table.id}) > 1
Now we've limited them to only those with more than one row per ID.
Now for display purposes, you can cheat this by Sorting the rows by the date (Under the Database menu in CR 8 I think) and then by right clicking the group footer and selecting insert section below.
Place the fields required in the group footer B. This will the latest row for the date field for each ID.
Then create formulas for the Group Footer A of:
whileprintingrecords;
if previous({table.id}) = {table.id} then
previous({table.field})
Where {table.id} is the field you need for the row preceding the last row for each ID. You'llneed as many formulas as you have fields in report footer B.
Then right click group footer A and select format section and in the X2 next to suppress place:
previous({table.id}) <> {table.id}
-k