row_number harus cukup untuk kebutuhan Anda.
Catatan:Saya berasumsi kolom Date Anda adalah tipe data Date atau DateTime yang sebenarnya dan bukan string dalam formulir yang Anda tunjukkan. Jika asumsi itu salah, beberapa manipulasi string tambahan akan diperlukan untuk mengubah Date menjadi format yang dapat diurutkan.
;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