2014-11-24 101 views
0

我想獲得每個服務器的最新記錄。獲取每個ID的最新記錄

下面是一些示例數據:

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 

但輸出結果不一致,不給我最新的在大多數情況下。

我也嘗試了一些子查詢,但失敗慘敗。

回答

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) 

內查詢獲取最新的時間戳爲每臺計算機名稱。然後,外部查詢將與該查詢結果連接,以基於內部查詢找到的時間/計算機名稱從表中獲取剩餘的字段。如果您有兩個記錄的最大時間相同的事件,那麼您將獲得該計算機名的兩個記錄。

+0

謝謝你,這是一個救生員,我讓自己瘋狂。 – sspeed 2014-11-24 17:40:20

0

試試這個:

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

這也似乎工作。我以爲我以前沒有在子查詢中加入不一致的數據,但這似乎也起作用。 – sspeed 2014-11-24 17:39:39

+0

很高興和它的工作:) – SMA 2014-11-24 17:42:06

0

我只使用GROUP函數,只能顯示那些SELECT語句的一部分的列。如果您需要顯示更多數據,則需要使用子查詢。例如,如果你想「選擇*」,你不能只使用一個GROUP BY,也不能使用子查詢。所以,這取決於你想要顯示的內容。