Ich habe die folgenden beiden Tabellen:Finden MAX-Wert von einer JOIN-Abfrage
Tabelle #USER
SELECT *
INTO #USER
FROM (
SELECT 'A.2017.JAN' AS [KSCEN], 'John' AS [Name], 'Doe' AS [Surname] UNION ALL
SELECT 'A.2017.JAN' AS [KSCEN], 'Paul' AS [Name], 'Red' AS [Surname] UNION ALL
SELECT 'A.2017.FEB' AS [KSCEN], 'John' AS [Name], 'Doe' AS [Surname] UNION ALL
SELECT 'A.2017.FEB' AS [KSCEN], 'Paul' AS [Name], 'Red' AS [Surname] UNION ALL
SELECT 'A.2017.MAR' AS [KSCEN], 'John' AS [Name], 'Doe' AS [Surname] UNION ALL
SELECT 'A.2017.MAR' AS [KSCEN], 'Paul' AS [Name], 'Red' AS [Surname] UNION ALL
SELECT 'A.2017.MAR' AS [KSCEN], 'Kate' AS [Name], 'Blue' AS [Surname]
) A
Tabelle #KSCEN
SELECT *
INTO #KSCEN
FROM (
SELECT 'A.2017.JAN' AS [ID], 6 AS [SEQ] UNION ALL
SELECT 'A.2017.FEB' AS [ID], 7 AS [SEQ] UNION ALL
SELECT 'A.2017.MAR' AS [ID], 8 AS [SEQ] UNION ALL
SELECT 'A.2017.APR' AS [ID], 9 AS [SEQ] UNION ALL
SELECT 'A.2017.MAY' AS [ID], 10 AS [SEQ]
) A
Mein Ziel ist es zu finden das Element von #KSCEN mit dem MAX SEQ, das mindestens einmal in der Tabelle #USER verwendet wird. Ich habe es mit der folgenden Unterabfrage und LEFT JOIN:
SELECT [ID]
FROM #KSCEN
WHERE [SEQ] = (SELECT MAX(B.[SEQ]) FROM #USER A LEFT JOIN #KSCEN B ON A.[KSCEN]=B.[ID])
Dies funktioniert berücksichtigen, sondern dass Tabelle #USER, in meinem Fall mehr als 30 Millionen Zeilen enthält, so dass es nicht sehr schnell ist die Abfrage als das System zu lösen müssen Sie jeder Reihe beitreten und dann den MAX finden.
Gibt es einen effizienteren Weg, um mein Problem zu lösen?
Ich stimme für das Schließen dieser Frage als Off-Topic, da Optimierungsfragen in CodeReview gehören. –
@ScottHunter Fragen, die mit dem Tag [query-optimization] markiert sind, sind hier sehr auf dem Vormarsch und haben eine respektable Fangemeinde von Leuten, die solche Fragen auf dieser Seite beantworten. –