2017-01-19 6 views
0

CTEを使用してファイルのリストで最新のファイルを取得しようとしています。これまでのところ私はこれを持っている:CTEパーティションが正しい行番号を返さない - TSQL

WITH CTE AS 
(
    SELECT 
     ID, TRISPATH, Document, 
     ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Document) AS RN 
    FROM 
     LinkedDocuments 
) 
SELECT 
    ID, Document, RN 
FROM 
    CTE 
WHERE 
    TRISPATH IS NOT NULL --AND RN!=1 

それは私が欲しいものを返すIDの一部で動作しているようですが、しかし、それらのいくつか(約30%)が1で起動しません、彼らは乱数で開始しますIDに基づいて:

14 J:\PRS\CVs\Original CVs\2015\N\*****, ***** CL Oct 15.txt 11 
14 J:\PRS\CVs\Original CVs\2015\N\*****, ***** CV Nov 15.pdf 12 
14 J:\PRS\CVs\Original CVs\2015\N\*****, ***** CV Oct 15.docx 13 

私はこれが起こっている理由を理解するように見えるカント、私はその何かがパーティションで行うことが確信しているが、私は何を把握することはできません。

+0

あなたが日付で各パーティションを注文する方法を見つける必要があります。行番号はCTEにWHERE句を移動し、1から始まるようにするには

。文書日付のタイムスタンプ列はありますか? –

+0

理想的には、このデータベースは本当にひどく設計されていますが、この表の唯一の列はID(ドキュメントがリンクされている人に関連しています)、Document Type(3の値の1つ)、Documentです。それらのほとんどは上記のフォーマットではありますが、すべてではありません。 –

+0

すべての文書は 'CV Nov 15.ext'で終わりますか? –

答えて

3

TRISPATHがnullのレコードがある場合は、行番号が割り当てられ、最後の選択で除外されます。

WITH CTE AS 
(
    SELECT ID, TRISPATH, Document, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Document) AS RN 
    FROM LinkedDocuments 
    WHERE TRISPATH IS NOT NULL 
) 
SELECT ID,Document, RN FROM CTE 
+0

ああ、あなたの魔法使い、よろしく! –

関連する問題