如何在选择查询中避免排序运算符

塞尔维亚

在我的select语句中,我有一个简单的子查询,该查询ExpirationDate在内部取最后一个ControlNo

此子查询会大大降低性能。QuoteIDClustered 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章