row_number あなたのニーズには十分なはずです。
注:Date列は実際のDateまたはDateTimeデータ型であり、表示した形式の文字列ではないと想定しています。その仮定が間違っている場合、Dateをソート可能な形式に変換するために追加の文字列操作が必要になります。
;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