Sql 有没有更好的方法来进行此连接?

Sql 有没有更好的方法来进行此连接?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个销售代理按季度的销售额表: Agent Quarter Sales ---------------------------- Alex Andersen 2011Q1 358 Alex Andersen 2011Q2 289 Alex Andersen 2011Q3 27 Alex Andersen 2011Q4 2965 Brian Blogg 2010Q3 277 Brian Blogg 2010Q4 123

我有一个销售代理按季度的销售额表:

Agent Quarter Sales ---------------------------- Alex Andersen 2011Q1 358 Alex Andersen 2011Q2 289 Alex Andersen 2011Q3 27 Alex Andersen 2011Q4 2965 Brian Blogg 2010Q3 277 Brian Blogg 2010Q4 123 Brian Blogg 2011Q1 783 Brian Blogg 2011Q2 0 Christy Cliff 2011Q2 777 Christy Cliff 2011Q3 273 Christy Cliff 2011Q4 111 Christy Cliff 2012Q1 901 但这还不包括销售数据,所以我想加入:

SELECT agent, sales
FROM salestable s1
JOIN
(
   SELECT agent AS e, MIN(quarter) AS q
   FROM salestable
   GROUP by employee
) AS q1 ON q1.e=s1.agent AND q1.mq=s1.quarter

但在我的数据集上,速度慢得令人无法接受。如果我可以使用游标,它只需要通过表一次,但是使用查询似乎需要连接。是这样吗?

试试这个变体,看看是否更好:

WITH cteRowNum AS (
    SELECT agent, quarter, sales,
           ROW_NUMBER() OVER (PARTITION BY agent ORDER BY quarter) AS RowNum
        FROM salestable
)
SELECT agent, quarter, sales
    FROM cteRowNum
    WHERE RowNum = 1;

您的查询看起来不错。。。我不认为光标会改善任何事情。。。您的
销售表上有哪些索引
?您有
(代理,季度)
索引吗?非常确定索引是(代理,季度)。使用光标可以使查询即时进行。使用我发布的查询需要10分钟???这可能是一个视图而不是您正在查询的表吗?
WITH cteRowNum AS (
    SELECT agent, quarter, sales,
           ROW_NUMBER() OVER (PARTITION BY agent ORDER BY quarter) AS RowNum
        FROM salestable
)
SELECT agent, quarter, sales
    FROM cteRowNum
    WHERE RowNum = 1;