SQL Server: unirse en la tabla derivada que contiene cláusula WITH?
-
30-09-2019 - |
Pregunta
Me gustaría unirse en una mesa subconsulta / derivado que contiene una cláusula WITH (la cláusula es necesario filtrar en ROW_NUMBER() = 1
). En Teradata algo similar podría funcionar bien, pero usos Teradata QUALIFY ROW_NUMBER() = 1
en lugar de una cláusula WITH.
Aquí está mi intento de esta unión:
-- 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é estoy haciendo mal?
Solución
Adición de una condición de unión es, probablemente, menos eficiente, pero por lo general bien funciona para mí.
INNER JOIN (
SELECT *,
ROW_NUMBER() OVER
(PARTITION BY JobModelID
ORDER BY StartDate DESC) AS RowNumber
FROM Runs
) Runs
ON JobModels.JobModelID = Runs.JobModelID
AND Runs.RowNumber = 1
Otros consejos
Se podría utilizar múltiples con cláusulas. Algo así como
;WITH AllRuns AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY JobModelID ORDER BY StartDate DESC) AS RowNumber
FROM Runs
),
Runs AS(
SELECT *
FROM AllRuns
WHERE RowNumber = 1
)
SELECT *
FROM ... INNER JOIN (
Runs ON JobModels.JobModelID = Runs.JobModelID
Para más detalles sobre los usos / estructura / reglas ver CON common_table_expression (Transact -SQL)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow