Sql server 当返回多个记录时,将结果限制为不同的系统名称
这是在SQL Server 2000上运行的 背景:当一台新服务器进入网络时,它将经历一系列状态(阶段),例如(加载、测试、配置、生产等),因为生产是最后一步(并非报告中的每台服务器都处于生产状态,因此此信息可能是一个无意义的点) 我继承了这一点,所以如果有任何问题,我会尽可能地回答。我正在尝试运行一个查询,以获取特定时间段内所有服务器的最新状态。我的查询当前正在返回服务器的每个状态,我只需要当前状态,这就是我需要您帮助的地方 我正在处理的查询如下:Sql server 当返回多个记录时,将结果限制为不同的系统名称,sql-server,sql-server-2000,Sql Server,Sql Server 2000,这是在SQL Server 2000上运行的 背景:当一台新服务器进入网络时,它将经历一系列状态(阶段),例如(加载、测试、配置、生产等),因为生产是最后一步(并非报告中的每台服务器都处于生产状态,因此此信息可能是一个无意义的点) 我继承了这一点,所以如果有任何问题,我会尽可能地回答。我正在尝试运行一个查询,以获取特定时间段内所有服务器的最新状态。我的查询当前正在返回服务器的每个状态,我只需要当前状态,这就是我需要您帮助的地方 我正在处理的查询如下: SELECT SD.ProjectName,
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`
我只需要返回以下结果:
Server Name Status History_ID
Server01 Production 1451
Server02 Failed 1455
提前感谢您的帮助。未经测试:
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')
AND history_ID = (
Select max(history_ID)
FROM SI_Status_History iSH
where iSH.SystemName = SD.SystemName)
ORDER BY H.history_id DESC, SD.SystemName, SD.ContactSBCuid, SD.ActualLiveDAte DESC, SD.ProjectName, SD.SystemType, H.EffectiveDate
选择SD.ProjectName、SD.SystemName、SD.Status、H.history\u id
从dbo.SI_系统详细信息作为SD
内部连接dbo.SI_项目作为P
在SD.ProjectName=P.ProjectName上
内部连接dbo.SI_StatusHistory作为H
在SD.SystemName=H.SystemName上
WHERE(P.Cancelled='N')和(P.Platform,如'%ibm%')和('20110101'@marc-s,感谢您的清理。我尝试了,但情况越来越糟。:)我知道它需要一个子查询,但我不知道放在哪里。非常感谢。我刚刚实现了您的解决方案并对其进行了测试,结果非常完美。再次感谢。
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')
AND history_ID = (
Select max(history_ID)
FROM SI_Status_History iSH
where iSH.SystemName = SD.SystemName)
ORDER BY H.history_id DESC, SD.SystemName, SD.ContactSBCuid, SD.ActualLiveDAte DESC, SD.ProjectName, SD.SystemType, H.EffectiveDate