4

私は何か間違ったことをしているに違いない。row_number 関数を使用して、rownum が1の値のみを選択して、常に最新のindexを取得しようとしています。ただし、rownum は where 句では認識されません。

SELECT  fs.docu_id as docID 
, fs.field_3 AS ProductNo
, fs.field_4 AS [Status]
, fs.field_5 AS [Index]
,pd.[doku_nr] AS docIDshort
, ROW_NUMBER() OVER(PARTITION BY fs.field_3 ORDER BY fs.field_5 Desc) AS rownum
FROM [table1] fs
JOIN [table2] pd
ON fs.docu_id=pd.docu_id 
AND  fs.field_4 = 'valid'

私は何が欠けていますか?別の選択ステートメントを作成する必要がありますか?

ありがとうございました。

4

1 に答える 1

6

Where節でウィンドウ関数を使用することはできません(SELECTまたはでのみORDER BY)。

ただし、代わりにCTEを使用できます。

WITH CTE
     AS (SELECT fs.docu_id                    AS docID, 
                fs.field_3                    AS ProductNo, 
                fs.field_4                    AS [Status], 
                fs.field_5                    AS [Index], 
                pd.[doku_nr]                  AS docIDshort, 
                Row_number() OVER( 
                    Partition BY fs.field_3 
                    ORDER BY fs.field_5 DESC) AS rownum 
         FROM   [table1] fs 
                JOIN [table2] pd 
                  ON fs.docu_id = pd.docu_id 
                     AND fs.field_4 = 'valid') 
SELECT docid, productno, status, [index], docIDshort 
FROM   CTE
WHERE  rownum = 1 
于 2013-10-16T13:54:52.557 に答える