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

我继承了一个应用程序,它将在多台主机上运行的某些日常命令的结果记录到MS-SQL表中。现在我被要求提供一个视图/查询,显示每个主机的最后一个日志行,以获得最后结果的概览

该表与此类似:

------------------------------
|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     |