与另一个具有最大行的 table 行连接

Joining with another table row that has max row

我有以下 table 结构:

CREATE TABLE Orders(OrderID INT);
INSERT INTO Orders(OrderID)
VALUES (1),(2),(3)

CREATE TABLE Scenarios(ScenarioID INT, OrderID INT, SequenceNo INT, Title NVARCHAR(100));
INSERT INTO Scenarios(ScenarioID,OrderID,SequenceNo,Title)
VALUES
--Order 1
(10,1,1,'Basic'),
(11,1,2,'Main'),

--Order 2
(12,2,1,'Basic'),
(13,2,2,'Main'),

--Order 3
(14,3,1,'Basic'),
(15,3,2,'Main')



CREATE TABLE Responses(ResponseID INT, OrderID INT, ScenarioID INT);
INSERT INTO Responses VALUES 
--Order 1
(100, 1,10), -- BASIC
(101, 1,10),-- BASIC

--Order 2
(102, 2,12),-- BASIC
(103, 2,12),-- BASIC
(104, 2,13),-- MAIN

-- Order 3
(105, 3,14),-- BASIC
(106, 3,14),-- BASIC
(107, 3,15)-- MAIN

我有以下查询,它给出了正确的结果。但它没有优化。即使有适当的索引也需要很长时间处理 1M 记录

SELECT  
    s.Title,
    COUNT(DISTINCT(o.OrderID)) AS [Count]
FROM Orders o
JOIN Responses r
    ON r.OrderID = o.OrderID
JOIN Scenarios s
    ON s.ScenarioID = r.ScenarioID
WHERE 
r.ScenarioID = (SELECT TOP 1 s1.ScenarioID
                FROM Scenarios s1
                JOIN Responses r1 on r1.ScenarioID = s1.ScenarioID
                WHERE s1.OrderID = o.OrderID
                ORDER BY s1.SequenceNO DESC)
GROUP BY s.Title

基本上我只想在 Scenario.SequenceNo 列为 MAX 的单行上将 Responses table 与 Scenarios table 连接起来。

这是我的SQL Fiddle

预期输出

Title   Count
Basic   1
Main    2

具有ROW_NUMBER()window功能:

WITH cte AS (
  SELECT o.OrderId, s.Title, 
    ROW_NUMBER() OVER (PARTITION BY o.OrderID ORDER BY s.SequenceNo DESC) rn
  FROM Orders o
  INNER JOIN Responses r ON r.OrderID = o.OrderID
  INNER JOIN Scenarios s ON s.ScenarioID = r.ScenarioID
)
SELECT Title, COUNT(*) Count 
FROM cte
WHERE rn = 1
GROUP BY Title

参见demo
结果:

> Title | Count
> :---- | ----:
> Basic |     1
> Main  |     2