SQL Server: unire sulla tabella derivata che contiene clausola WITH?
-
30-09-2019 - |
Domanda
Mi piacerebbe unirsi a un tavolo subquery / derivata che contiene una clausola WITH (la clausola è necessario per filtro ROW_NUMBER() = 1
). In Teradata qualcosa di simile avrebbe funzionato bene, ma usi Teradata QUALIFY ROW_NUMBER() = 1
invece di una clausola WITH.
Ecco il mio tentativo di questa registrazione:
-- 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
Che cosa sto facendo di sbagliato?
Soluzione
L'aggiunta di una condizione di join è probabilmente meno efficace, ma di solito funziona bene per me.
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
Altri suggerimenti
Si potrebbe utilizzare più con clausole. Qualcosa di simile
;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
Per maggiori dettagli sulle usanze / struttura / rules vedere CON common_table_expression (Transact -SQL)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow