Это работает на SQL Server 2000
Справочная информация: когда новый сервер подключается к сети, он проходит через ряд состояний (этапов), таких как (загрузка, тестирование, настройка, производство,и т. д.) если производство является последним этапом (не каждый сервер в отчете будет работать, поэтому этот бит информации может быть спорным).
Я унаследовал это, поэтому, если возникнут какие-либо вопросы, я будуответь на них как можно лучше.Я пытаюсь выполнить запрос, чтобы получить последний статус всех серверов за определенный период времени.Мой запрос в настоящее время возвращает все состояния сервера, и мне нужен только текущий статус, и именно здесь мне нужна ваша помощь.
Запрос, с которым я работаю, выглядит следующим образом:
SELECT SD.ProjectName, SD.SystemName, SD.Status, H.history_id
FROM dbo.SI_SystemDetail AS SD
INNER JOIN dbo.SI_Projects AS P ON SD.ProjectName = P.ProjectName
INNER JOIN dbo.SI_StatusHistory AS H ON SD.SystemName = H.SystemName
WHERE
(P.Cancelled = 'N')
AND (P.Platform LIKE '%ibm%')
AND ('20110101' <= CONVERT(varchar(8), H.EffectiveDate, 112))
AND (CONVERT(varchar(8), H.EffectiveDate, 112) <= '20111111')
ORDER BY
H.history_id DESC, SD.SystemName, SD.ContactSBCuid, SD.ActualLiveDAte DESC,
SD.ProjectName, SD.SystemType, H.EffectiveDate`
Это вернет несколько дубликатов для имени системы, но мне нужен только один, который должен соответствовать наибольшему номеру history_id.Например, предположим, что существует сервер с именем:
Server Name Status History_ID
Server01 Loading 1001
Server01 Configuring 1081
Server01 Testing 1101
Server01 Production 1451
Server02 Loading 1002
Server02 Configuring 1083
Server02 Testing 1104
Server02 Failed 1455
Мне просто нужно вернуть следующие результаты:
Server Name Status History_ID
Server01 Production 1451
Server02 Failed 1455
Заранее спасибо за помощь.