SQL Server: Присоединяйтесь к полученной таблице, содержащуюся с предложением?

StackOverflow https://stackoverflow.com/questions/2684780

Вопрос

Я хотел бы присоединиться к подзвучной / полученной таблице, которая содержит предложение с предложением (предложение, необходимое для фильтрации 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top