Sql 从表中获取每个唯一主机的最后一行日志
我继承了一个应用程序,它将在多台主机上运行的某些日常命令的结果记录到MS-SQL表中。现在我被要求提供一个视图/查询,显示每个主机的最后一个日志行,以获得最后结果的概览 该表与此类似:Sql 从表中获取每个唯一主机的最后一行日志,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我继承了一个应用程序,它将在多台主机上运行的某些日常命令的结果记录到MS-SQL表中。现在我被要求提供一个视图/查询,显示每个主机的最后一个日志行,以获得最后结果的概览 该表与此类似: ------------------------------ |HOST |LAST_RUN |RESULT | ------------------------------ |SERVER1 |13-07-2009 |OK | |SERVER2 |13-07-2009 |Failed | |S
------------------------------
|HOST |LAST_RUN |RESULT |
------------------------------
|SERVER1 |13-07-2009 |OK |
|SERVER2 |13-07-2009 |Failed |
|SERVER1 |12-07-2009 |OK |
|SERVER2 |12-07-2009 |OK |
|SERVER3 |11-07-2009 |OK |
------------------------------
在这种情况下,查询应输出:
------------------------------
|HOST |LAST_RUN |RESULT |
------------------------------
|SERVER1 |13-07-2009 |OK |
|SERVER2 |12-07-2009 |Failed |
|SERVER3 |11-07-2009 |OK |
------------------------------
…因为这是每个主机的最后一行
我意识到我可能遗漏了一些简单的东西,但我似乎无法正确地理解:-(
谢谢,
马克。这里有一个快速版本:
SELECT lt.Host, lt.Last_Run, lt.Results
from LogTable lt
inner join (select Host, max(Last_Run) Last_Run
from LogTable
group by Host) MostRecent
on MostRecent.Host = lt.Host
and MostRecent.Last_run = lt.Last_Run
这应该适用于大多数SQL系统。SQLServer2005或2008中的排名函数可能会更好一些
select host, max (last_run) from t group by host
为您获取所需的主机和最后一次运行。然后
(select host as h, last_run as lr, result as r from t) inner join (select host as h_max, max (last_run) as lr_max from t group by host) on h=h_max, lr=lr_max
如果我的sql不准确,请原谅——不要尝试或查找它,但你知道了。我认为SERVER2上次运行日期有一个输入错误 这提供了与所有其他伟大答案相同的结果,而无需使用子查询:
select t."HOST"
, t."LAST_RUN"
, t."RESULT"
from yourtable t
left outer join yourtable t2
on t."HOST" = t2."HOST"
and
t2."LAST_RUN" > t."LAST_RUN"
where t2."RESULT" is null;
结果集如下所示:
|HOST |LAST_RUN |RESULT |
------------------------------
|SERVER1 |13-07-2009 |OK |
|SERVER2 |13-07-2009 |Failed |
|SERVER3 |11-07-2009 |OK |
是的--这就是我的想法,而且比我的好。我也喜欢行数解决方案。我的问题是,我总是要盯着它们看几分钟才能弄清楚它们在做什么。即使如此,它们在非常复杂的查询中还是非常有用的。
|HOST |LAST_RUN |RESULT |
------------------------------
|SERVER1 |13-07-2009 |OK |
|SERVER2 |13-07-2009 |Failed |
|SERVER3 |11-07-2009 |OK |