Un esempio collegato ad un post precedente per filtrare una query con una funzione di Ranking ed estrarre solo le righe rispondenti al rank prestabilito.
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 nei commenti, 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.