How to filter maximum results entries
This is a way of doing it. Can be tested in http://sqlfiddle.com/#!2/7c4525/4

SELECT R1.*
FROM Results R1
INNER JOIN
(
  SELECT RegNo, SubjectCode, Max(Marks) AS MaxMark
  FROM Results
  GROUP BY RegNo, SubjectCode
) R2
ON R1.RegNo = R2.RegNo 
  AND R1.SubjectCode = R2.SubjectCode 
  AND R1.Marks = R2.MaxMark


This previous solution could output several rows for the same Reg.No and SubjectCode in case that student tied for her best result in more than one attempt.
In this case, if only the row from the last attempt is wanted to be shown you can use the following variation. 
Can be tested in http://sqlfiddle.com/#!2/070c5/3. Note that I have added an extra row to the sample data you provided in order to reproduce the situation.

SELECT R1.RegNo, R1.SubjectCode, Max(R1.Attempt), R1.Grade, R1.Marks
FROM Results R1
INNER JOIN
(
  SELECT RegNo, SubjectCode, Max(Marks) AS MaxMark
  FROM Results
  GROUP BY RegNo, SubjectCode
) R2
ON R1.RegNo = R2.RegNo 
  AND R1.SubjectCode = R2.SubjectCode 
  AND R1.Marks = R2.MaxMark
GROUP BY RegNo, SubjectCode, Grade, Marks


However, if in case of ties, the prefered result to be shown is the lower attempt number Max(R1.Attempt) should be replaced by Min(R1.Attempt)