SQL 交叉应用三个表

SQL Cross Apply with three tables

我正在尝试使用交叉应用以省时的方式合并 3 个表。我可以获得我想要的结果,但是 运行 时间太长了。这三个表是:

-CUSTOMERS,其中包含列 CustomerId(主键)和 CurrentSetType

-HISTORY,其中包含列 CustomerId(外键)、SetTypeTimeStamp

-UPDATELIST,其中包含 CustomerId

我的目标是从 HISTORY 中为 UPDATELIST 中的每个 CustomerId 找到与 CurrentSetType 不同的最新 SetType(这是美化 'undo' 按钮的一部分)。我相信我的问题是 CUSTOMERSHISTORY 表很大,我不认为在对整个事情。我当前的查询是这样的:

DECLARE @UPDATELIST TABLE (Identifier INT NOT NULL PRIMARY KEY);
INSERT INTO @UPDATELIST (Identifier) VALUES (#####); -- a few hundred lines of this

SELECT CustomerId, ITEM.SetType
FROM CUSTOMERS
CROSS APPLY
 (SELECT TOP 1 SetType FROM HISTORY
  WHERE HISTORY.CustomerId IN (SELECT Identifier FROM @UPDATELIST)
  AND HISTORY.CustomerId = CUSTOMERS.CustomerId
  AND HISTORY.SetType != CUSTOMERS.CurrentSetType ORDER BY TimeStamp DESC) AS ITEM

对此最有效的查询是什么?

编辑:我使用的是 MSDN SQL 版本 12.0.5532

我的第一个想法是这样的:

SELECT
    CustomerID
    , SetType
FROM
    (
        SELECT
            C.CustomerID
            , H.SetType
            , ROW_NUMBER() OVER (PARTITION BY C.CustomerID ORDER BY H.TimeStamp DESC) R
        FROM
            CUSTOMERS C
            JOIN UPDATELIST U ON U.CustomerId = C.CustomerId
            JOIN HISTORY H ON
                H.CustomerId = C.CustomerId
                AND H.SetType <> C.CurrentSetType
    ) Q
WHERE R = 1

这是如何运作的?