Tytuł mówi wszystko, dlaczego nie mogę użyć funkcji okienkowej w klauzuli where w SQL Server?Dlaczego żadne funkcje okienkowe w klauzulach where?
Zapytanie to ma sens:
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)
Ale to nie działa. Czy istnieje lepszy sposób niż CTE/Podzapytanie?
EDIT
Na co warto to zapytanie z 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 za odpowiedzi pokazujących z podzapytania, ale naprawdę ja Szukam przyczyny, dla której nie można używać funkcji okienkowych w klauzulach, gdzie.
Funkcje okien są częścią warstwy nierelacyjnej (ponieważ teoria relacyjna nie zajmuje się uporządkowanymi danymi); w ten sposób są one oceniane po wszystkim. –