Sul post Usare la funzione Rank per estrarre una lista di righe con la data più alta ho mostrato come usare il ranking per verificare qual’è la data più alta o la più bassa in un determinato range, ma non ho mostrato come poi filtrare in base al ranking generato come mi è stato giustamente fatto osservare da Maurizio, perciò ecco come si fa:
SELECT [IDListinoRg]
,[IDListino]
,[IDArticolo]
,[Prezzo]
FROM (
SELECT [IDListinoRg]
,[IDListino]
,[IDArticolo]
,[Prezzo]
,[ValidoDal]
,RANK() OVER (PARTITION BY IDLISTINO, IDARTICOLO ORDER BY ValidoDal DESC) DATERANK
FROM [paperinik].[dbo].[TbListiniRg]) Li
WHERE
DateRank = 1
perché non mettere l’espressione di Rank direttamente nella Where? Perché si ottiene un errore, non è permesso probabilmente per le modalità con cui la funzione di Rank viene elaborata, pertanto bisogna fare una select nidificata.
Ovviamente questo tipo di Query non è efficientissima, però da una soluzione ad un problema reale.