Je souhaite rejoindre une table sous-requête/dérivée contenant une clause WITH (la clause WITH est nécessaire pour filtrer sur ROW_NUMBER() = 1
). Dans Teradata, quelque chose de similaire fonctionnerait bien, mais Teradata utilise QUALIFY ROW_NUMBER() = 1
au lieu d'une clause WITH.SQL Server: jointure sur une table dérivée contenant la clause WITH?
Voici ma tentative de cette jointure:
-- want to join row with max StartDate on JobModelID
INNER JOIN (
WITH AllRuns AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY JobModelID ORDER BY StartDate DESC) AS RowNumber
FROM Runs
)
SELECT * FROM AllRuns WHERE RowNumber = 1
) Runs
ON JobModels.JobModelID = Runs.JobModelID
Qu'est-ce que je fais mal?
Une idée combien moins efficace ce serait? – jnylen
@jnylen, Avez-vous essayé de profiler cette requête? Plans d'exécution, profileur, statistiques client? –
@jnylen: Je suis d'accord avec Astander. Ma règle générale: si la requête revient dans un délai raisonnable, c'est bon. Sinon, je commence à chercher des hotspots et j'essaie de refactoriser. Je n'ai jamais eu à refactor de code comme ce que j'ai montré ci-dessus. – bernie