row_number должно быть достаточно для ваших нужд.
Примечание: я предполагаю, что ваш столбец Date - это истинный тип данных Date или DateTime, а не строка в показанной вами форме.Если это предположение неверно, для преобразования даты в сортируемый формат потребуются дополнительные манипуляции со строками.
;with cteRowNumber as (
select Date, ProductID, Year, Price,
row_number() over (partition by ProductID, Year order by Date desc) as RowNum
from YourTable
)
select Date, ProductID, Year, Price
from cteRowNumber
where RowNum = 1