SQL Server: Присоединяйтесь к полученной таблице, содержащуюся с предложением?
-
30-09-2019 - |
Вопрос
Я хотел бы присоединиться к подзвучной / полученной таблице, которая содержит предложение с предложением (предложение, необходимое для фильтрации ROW_NUMBER() = 1
). В терадате что-то подобное будет работать нормально, но терадата использует 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