SQL Server: CTE, как получить номер последней строки - PullRequest
2 голосов
/ 27 января 2011

У меня есть такой CTE:

;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)?

Ответы [ 3 ]

2 голосов
/ 27 января 2011

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

;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'

2 голосов
/ 27 января 2011

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


select database_name, max(backup_finish_date)
from bckHist
group by database_name
1 голос
/ 27 января 2011

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

;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 по убыванию (по возрастанию) и выбирайте только первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...