我想获得每台服务器的最新记录。
以下是一些示例数据:
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
但是这会产生不一致的结果,并且在大多数情况下都不会给我最新的结果。
我也尝试了一些子查询,但失败了。
答案 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而不使用子查询。所以,这取决于你想要展示的内容。