目标是使用尽可能少的资源返回分区的第一行.到目前为止,我已经看到了使用建议:
with customerinfo_CTE as
(
select row_number() over(partition by customer order by year desc) as RNumber, *
from customerInfo
)
select *
from customerinfo_CTE
where RNumber = 1
Run Code Online (Sandbox Code Playgroud)
所以,我有一个customerInfo表,我们跟踪过去的客户详细信息(IE:联系信息,公司名称等).我此时正在使用CTE,但也可以使用#Temp Table或@Variable Table.
我希望有一种方法可以通过在连接或脚本的其他部分中使用它之前获得CTE(或其他)中唯一的年度第一条记录来提高性能.
现在,我正在使用:
with customerinfo_CTE as
(
select row_number() over(partition by customer order by year desc) as RNumber, *
from customerInfo
)
select *
from customerOrders a
inner join customerinfo_CTE b
on a.CustomerID = b.CustomerID
where b.RNumber = 1
Run Code Online (Sandbox Code Playgroud)
虽然这给了我想要的结果,但我希望有一种方法可以减少它以获得CTE声明中的第一个结果,而不必在连接的where子句中过滤后端.
提前致谢.