У меня есть следующая структура таблицы:
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
В основном я хочу объединить таблицу Responses
с таблицей Scenarios
только в одной строке, где столбец Scenario.SequenceNo
равен MAX
.
Вот мой SQL Скрипка
Ожидаемый выход
Title Count
Basic 1
Main 2