Вы хотите использовать функцию rank
в T-SQL:
select
date,
student,
rank() over (partition by date order by score desc) as rank
from
grades
order by
date, rank, student
Магия в предложении over
. Видите, он разбивает эти ранжировки на date
, а затем упорядочивает эти подмножества на score
. Бриллиант, а?