【发布时间】:2020-07-30 07:50:06
【问题描述】:
我的表结构如下:
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
我有以下查询,它给了我正确的结果。但它没有优化。即使有正确的索引,它也需要很长时间才能处理 100 万条记录
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 表和Scenarios 表。
这里是我的SQL Fiddle
预期输出
Title Count
Basic 1
Main 2
【问题讨论】:
-
你的预期输出是什么?
-
@forpas 看到我上面的更新
标签: sql-server tsql sql-server-2012