1

WITH句を含むサブクエリ/派生テーブルに参加したい(WITH句はフィルタリングに必要ROW_NUMBER() = 1です)。Teradataでは、同様の機能が正常に機能しますが、TeradataはQUALIFY ROW_NUMBER() = 1WITH句の代わりに使用します。

これがこの参加の私の試みです:

-- 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

私は何が間違っているのですか?

4

2 に答える 2

1

複数のWITH句を使用できます。何かのようなもの

;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 

使用法/構造/ルールの詳細については、WITH common_table_expression(Transact-SQL)を参照してください。

于 2010-04-21T16:42:20.227 に答える
0

結合条件を追加するのはおそらく効率的ではありませんが、通常は問題なく機能します。

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
于 2010-04-21T16:56:39.507 に答える