获取每个ID的最新记录

时间:2014-11-24 17:23:10

标签: mysql sql

我想获得每台服务器的最新记录。

以下是一些示例数据:

TimeGenerated        SourceName            ComputerName  Message
2014-11-22 21:48:30  Windows Update Agent  Server1       Update Failed
2014-11-22 21:42:30  Windows Update Agent  Server2       Update Failed
2014-11-22 21:45:30  Windows Update Agent  Server2       Update Failed
2014-11-22 21:43:30  Windows Update Agent  Server1       Update Failed

期望的输出:

TimeGenerated        SourceName            ComputerName  Message
2014-11-22 21:48:30  Windows Update Agent  Server1       Update Failed
2014-11-22 21:45:30  Windows Update Agent  Server2       Update Failed

我试过了:

SELECT * FROM TABLE 
GROUP BY ComputerName 
ORDER BY TimeGenerated ASC 

但是这会产生不一致的结果,并且在大多数情况下都不会给我最新的结果。

我也尝试了一些子查询,但失败了。

3 个答案:

答案 0 :(得分:1)

SELECT *
FROM yourtable
INNER JOIN (
   SELECT MAX(timeGenerated) as maxtime, ComputerName
   FROM yourtable
   GROUP BY ComputerName
) AS latest_record ON (yourtable.timeGenerated = maxtime)
   AND (latest_record.ComputerName = yourtable.ComputerName)

内部查询获取每个计算机名称的最新时间戳。然后外部查询根据内部查询找到的时间/计算机名,连接该查询结果以从表中获取其余字段。如果您记录了两个具有相同最大时间的事件,那么您将获得该计算机名称的两条记录。

答案 1 :(得分:0)

试试这个:

SELECT ComputerName, Max(date)
FROM TABLE
GROUP BY ComputerName

答案 2 :(得分:0)

我只使用GROUP函数,只能显示属于该SELECT语句的列。如果需要显示更多数据,则需要使用子查询。例如,如果您想选择*",则不能只使用GROUP BY而不使用子查询。所以,这取决于你想要展示的内容。