SQL Server: Werden Sie Mitglied auf abgeleitete Tabelle, die WITH-Klausel enthält?
-
30-09-2019 - |
Frage
Ich möchte auf einer Unterabfrage / abgeleitete Tabelle verbinden, die ein WITH-Klausel enthält (die WITH-Klausel ist notwendig, um Filter auf ROW_NUMBER() = 1
). In Teradata etwas Ähnliches würde gut funktionieren, aber Teradata Anwendungen QUALIFY ROW_NUMBER() = 1
statt einer WITH-Klausel.
Hier ist mein Versuch, diese join:
-- 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
Was mache ich falsch?
Lösung
Hinzufügen einer Join-Bedingung wahrscheinlich weniger effizient ist, aber in der Regel funktioniert gut für mich.
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
Andere Tipps
Sie könnten mehr MIT Klauseln verwenden. So etwas wie
;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
Für weitere Einzelheiten über die Verbräuche / Struktur / Regeln finden Sie unter MIT common_table_expression (Transact -SQL)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow