Мне нужна помощь с запросом, который проверяет базу данных MSDB на наличие результатов задания агента SQL Server. Мой запрос выглядит следующим образом:
SELECT CONVERT(VARCHAR(30), Serverproperty('ServerName')),
a.run_status,
b.run_requested_date,
c.name,
CASE c.enabled
WHEN 1 THEN 'Enabled'
ELSE 'Disabled'
END,
CONVERT(VARCHAR(10), CONVERT(DATETIME, Rtrim(19000101))+(a.run_duration *
9 +
a.run_duration % 10000 * 6 + a.run_duration % 100 * 10) / 216e4, 108),
b.next_scheduled_run_date
FROM (msdb.dbo.sysjobhistory a
LEFT JOIN msdb.dbo.sysjobactivity b
ON b.job_history_id = a.instance_id)
JOIN msdb.dbo.sysjobs c
ON b.job_id = c.job_id
ORDER BY c.name
Пока все хорошо, но его запуск возвращает несколько результатов для одних и тех же заданий в зависимости от того, сколько раз они выполнялись до запроса. Это не хорошо. Мне нужен только один результат на работу и только последний.
Если я добавлю строку:
ГДЕ b.session_id = (ВЫБЕРИТЕ МАКС (идентификатор_сессии) из msdb.dbo.sysjobactivity)
Он работает лучше, но тогда он перечисляет только самые последние задания в зависимости от параметра session_id. Это исключит задания, которые некоторое время не выполнялись и тоже не годятся.
Может ли кто-нибудь помочь мне с этим?
Я пробовал использовать DISTINCT и / или GROUP BY, но не могу заставить его работать.