The primary key of your table at present table is a composite one of StudentID, TopicsMastered and AssessmentDate. You can return only those rows per student/topic with the earliest assessment date, assuming you have a date column, with a query along
these lines:
SELECT *
FROM [YourTable] AS T1
WHERE [AssessmentDate] =
(SELECT MIN([AssessmentDate])
FROM [YourTable] AS T2
WHERE T2.[StudentID] = T1.[StudentID]
AND T2.[TopicsMastered] = T1.[TopicsMastered]);
So you could use this as the RecordSource for a report.
To permanently eliminate the redundant rows, if you make a copy of the structure only of you table under a new name you should be able to insert the rows returned by the above query into it by changing it to an 'append' query. In this new table it should now
be possible to define StudentID and TopicsMastered as the composite primary key.
Alternatively you could delete the redundant rows from the original table with:
DELETE *
FROM [YourTable] AS T1
WHERE [AssessmentDate] >
(SELECT MIN([AssessmentDate])
FROM [YourTable] AS T2
WHERE T2.[StudentID] = T1.[StudentID]
AND T2.[TopicsMastered] = T1.[TopicsMastered]);
But if you do the latter, be sure to back up the table first.