SQL Server:句に含まれる派生テーブルに参加しますか?
-
30-09-2019 - |
質問
句を含むサブクエリ /派生テーブルに参加したいと思います(with句はフィルタリングするために必要です ROW_NUMBER() = 1
)。 Teradataでは、似たようなものがうまくいくでしょうが、Teradataは使用します QUALIFY ROW_NUMBER() = 1
句の代わりに。
これが私の試みです。
-- 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
私は何が間違っているのですか?
解決
結合条件を追加すると、おそらく効率が低くなりますが、通常は正常に機能します。
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
他のヒント
句で倍数を使用できます。何かのようなもの
;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
使用法/構造/ルールの詳細については、 common_table_expression(transact-sql)
所属していません StackOverflow