在我的select语句中,我有一个简单的子查询,该查询ExpirationDate
在内部取最后一个ControlNo
。
此子查询会大大降低性能。QuoteID
是Clustered index
对表tblQuotes
统计信息是最新的。
SELECT
ControlNo,
PolicyNumber,
(
SELECT TOP 1 Q.ExpirationDate
FROM tblQuotes Q
WHERE Q.ControlNo = tblQuotes.ControlNo
ORDER BY Q.QuoteID DESC
)
SUM(Premium) as Premium
FROM tblQuotes
GROUP BY ...
在这种情况下是否可以找到解决方法?
尝试替换子查询:
(
SELECT TOP 1 Q.ExpirationDate
FROM tblQuotes Q
WHERE Q.ControlNo = tblQuotes.ControlNo
ORDER BY Q.QuoteID DESC
)
如果您正在寻找最大值,则使用Windows功能
MAX(ExpirationDate) OVER(PARTITION BY ControlNo)
如果要按特定顺序查找第一个值,请使用:
FIRST_VALUE(ExpirationDate) OVER(PARTITION BY ControlNo ORDER BY QuoteID DESC)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句