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

Это похоже на работу с некоторыми из идентификаторов она возвращает то, что я хочу, однако некоторые из них (около 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 (по отношению к человеку, к которому привязан документ) Тип документа (1 из 3 значений) и Документ, все они являются первичными ключами. с датами, большинство из которых находятся в формате, показанном выше, но не во всех из них. –

+0

У каждого документа заканчивается 'CV Nov 15.ext'? –

ответ

3

Если у вас есть записи, где TRISPATH равно null, им будет присвоен номер строки, а затем будет отфильтрован в окончательном выборе.

Чтобы номера строк начинаются с 1, переместите пункт WHERE в КТР:

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

Ах, ваш волшебник, спасибо! –

Смежные вопросы