【发布时间】:2012-12-09 10:46:51
【问题描述】:
标题说明了一切,为什么我不能在 SQL Server 的 where 子句中使用窗口函数?
这个查询很有意义:
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)
但它不起作用。有比 CTE/子查询更好的方法吗?
编辑
对于它的价值,这是带有 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
编辑
+1 表示带有子查询的答案,但实际上我正在寻找无法在 where 子句中使用窗口函数的原因。
【问题讨论】:
-
开窗函数是非关系层的一部分(因为关系理论不处理有序数据);因此,它们会在其他所有内容之后进行评估。
标签: sql sql-server tsql window-functions