Я пытаюсь получить статус заданий обслуживания в SQL, используя приведенный ниже запрос.Получить последнее время выполнения SQL-запросов на обслуживание
USE msdb
GO
SELECT Distinct SJ.Name AS "Jobs/Sql ServerInstances",
CONVERT(date, getdate(),101) as "Date last monitored",
SJH.run_date AS "Date last run",
CASE SJH.run_status
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Successful'
WHEN 3 THEN 'Cancelled'
WHEN 4 THEN 'In Progress'
END AS LastRunStatus
FROM sysjobhistory SJH, sysjobs SJ
WHERE SJH.job_id = SJ.job_id and SJH.run_date =
(SELECT MAX(SJH1.run_date) FROM sysjobhistory SJH1 WHERE SJH.job_id = SJH1.job_id)
and SJ.Name like '%DB%'
ORDER BY SJH.run_date desc
И ниже результат, который он возвращает.
Jobs/Sql ServerInstances Date last monitored Date last run LastRunStatus
DB_BackuPlan.15min_trx 2016-11-04 20161104 Failed
DB_BackuPlan.15min_trx 2016-11-04 20161104 Successful
DB_BackuPlan.Differential 2016-11-04 20161104 Successful
DB_BackuPlan.Full 2016-11-04 20161029 Successful
Однако я хочу вернуть только последнюю запись для резервного копирования журнала транзакций. Я понимаю, что ключевое слово DISTINCT будет искать на уровне строки, а не на уровне столбца (и, следовательно, возвращает мне два результата, один для статуса не удалось, а другой для статуса успешно для той же работы). Есть ли способ, по которому я могу вернуть только последнюю информацию о запуске для вышеуказанных заданий?
Я попытался с помощью ключевого слова TOP. Но, к сожалению, он не возвращает статус моего дифференциального резервного копирования и полной резервной копии. Мне было интересно, есть ли способ устранить дубликат, основанный на самом названии работы. –