SQL Server:在包含子句的派生表上加入?
-
30-09-2019 - |
题
我想加入包含子句的子查询 /派生表 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