2017-01-19 13 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

你需要找到一種方法來排序按日期每個分區。是否有文檔日期時間戳列可用? –

+0

理想情況下,我會,但這個數據庫我真的很糟糕的設計,該表中唯一的列是ID(相對於文檔鏈接到的人)文檔類型(3值的1)和文檔,它們都是主鍵。日期大多數是上面顯示的格式,但不是全部。 –

+0

每個文檔都以'CV Nov 15.ext'結尾嗎? –

回答

3

如果您有TRISPATH爲空的記錄,它們將被分配一個行號,然後在最終選擇中被過濾掉。

爲了確保行號從1開始,WHERE子句移動到CTE:

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

Ahh your a wizard,thankyou! –