Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Guida rapida utilizzando RANK su più variabili

row_number dovrebbe essere sufficiente per le tue esigenze.

Nota:presumo che la tua colonna Date sia un tipo di dati Date o DateTime vero e non una stringa nel modulo che hai mostrato. Se tale presupposto è errato, sarebbe necessaria una manipolazione aggiuntiva della stringa per convertire la data in un formato ordinabile.

;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