2011-01-27 3 views
1

У меня есть КТР вроде этого:SQL Server: КТР, как получить последний номер строки

;WITH Lastdt AS 
(
    SELECT database_name, backup_finish_date, 
    ROW_NUMBER() OVER (PARTITION BY database_name ORDER BY backup_finish_date, database_name) AS 'RowNumber' 
    FROM bckHist 
) 
SELECT database_name, backup_finish_date 
FROM Lastdt 
WHERE RowNumber = '7' 

Как я могу получить последнюю строку с наибольшим номером из запроса (заменить жёстко 7)?

ответ

1

Если вам действительно нужно только последнюю строку (из запроса), то это еще проще (для данного случая):


select database_name, max(backup_finish_date) 
from bckHist 
group by database_name 
+0

Yep, Я думал так слишком сложно! – atricapilla

1

Попробуйте это:

;WITH Lastdt AS 
(
    SELECT database_name, backup_finish_date, 
    ROW_NUMBER() OVER (PARTITION BY database_name ORDER BY backup_finish_date, database_name) AS 'RowNumber' 
    FROM bckHist 
) 
SELECT TOP 1 
    database_name, backup_finish_date 
FROM Lastdt 
ORDER BY RowNumber DESC 

В основном заказать RowNumber убыванию (большой), и выбрать только первый.

+0

Это Retuns только один row, I last row (max rownumber) из каждого подмножества (на основе database_name). – atricapilla

+1

@atricapilla: да, он возвращает только одну строку - это то, о чем вы просили в своем вопросе .... –

2

Я думаю, что это легко ...

;WITH Lastdt AS 
(
    SELECT database_name, backup_finish_date, 
    ROW_NUMBER() OVER (PARTITION BY database_name ORDER BY backup_finish_date desc, database_name) AS 'RowNumber' 
    FROM bckHist 
) 
SELECT database_name, backup_finish_date 
FROM Lastdt 
WHERE RowNumber = '1' 
 
+0

Нет, это не дает ответ rihgt – atricapilla

+0

, который, вероятно, из-за котировок, попробуйте WHERE RowNumber = 1 –

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