Il titolo dice tutto, perché non è possibile utilizzare una funzione con finestra in una clausola where in SQL Server?Perché nessuna funzione con finestra in dove clausole?
Questa interrogazione ha perfettamente senso:
select id, sales_person_id, product_type, product_id, sale_amount
from Sales_Log
where 1 = row_number() over(partition by sales_person_id, product_type, product_id order by sale_amount desc)
Ma non funziona. C'è un modo migliore di un CTE/sottoquery?
EDIT
Per quello che il suo valore è la query con un CTE:
with Best_Sales as (
select id, sales_person_id, product_type, product_id, sale_amount, row_number() over (partition by sales_person_id, product_type, product_id order by sales_amount desc) rank
from Sales_log
)
select id, sales_person_id, product_type, product_id, sale_amount
from Best_Sales
where rank = 1
EDIT
+1 per le risposte che mostrano con una sottoquery, ma in realtà io Sto cercando il ragionamento che sta dietro il non poter usare le funzioni di windowing in dove clausole.
Le funzioni di generazione sono parte del livello non relazionale (perché la teoria relazionale non tratta i dati ordinati); quindi vengono valutati dopo ogni altra cosa. –