12
我已經做了一些尋找,似乎無法獲得我期待的結果。基本上我們公司有四種不同的管理系統,我正在定期組合來自每個系統的所有數據。我的目標是每小時將數據更新到中央數據庫。下面是一個簡單的數據集,我有工作:從數據庫檢索每個組中的最後一條記錄 - SQL Server 2005/2008
COMPUTERNAME | SERIALNUMBER | USERNAME | LASTIP | LASTUPDATE | SOURCE
TEST1 | 1111 | BOB | 1.1.1.1 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST1 | 1111 | BOB | 1.1.1.1 | 1/18/2011 01:00:00 | MGMT_SYSTEM_2
TEST1 | 1111 | PETER | 1.1.1.11 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST2 | 2222 | GEORGE | 1.1.1.2 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST3 | 3333 | TOM | 1.1.1.3 | 1/19/2011 01:00:00 | MGMT_SYSTEM_2
TEST4 | 4444 | MIKE | 1.1.1.4 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST4 | 4444 | MIKE | 1.1.1.41 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST5 | 5555 | SUSIE | 1.1.1.5 | 1/19/2011 01:00:00 | MGMT_SYSTEM_1
所以我想查詢這個主表,只檢索最新的記錄(基於LASTUPDATE),這樣我可以獲取關於該系統的最新信息。問題是一個系統可能在每個數據庫中,但是它們當然不會有相同的更新時間。
我希望得到的東西是這樣的:
TEST1 | 1111 | PETER | 1.1.1.11 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST2 | 2222 | GEORGE | 1.1.1.2 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST3 | 3333 | TOM | 1.1.1.3 | 1/19/2011 01:00:00 | MGMT_SYSTEM_2
TEST4 | 4444 | MIKE | 1.1.1.41 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST5 | 5555 | SUSIE | 1.1.1.5 | 1/19/2011 01:00:00 | MGMT_SYSTEM_1
我已經使用MAX功能試過,但我只能檢索一列。而且我不能在子查詢中使用它,因爲我沒有一個唯一的ID字段來提供最新的更新記錄。其中一個系統是MySQL數據庫,MySQL中的MAX函數實際上按我需要的方式工作,只爲每個GROUP BY返回一條記錄,但在SQL Server中不起作用。
我想我需要使用MAX和左加入,但我迄今爲止的嘗試都失敗了。
您的幫助將不勝感激。在過去的3-4個小時裏,我一直在努力爭取一個正在運行的查詢。此主表位於SQL Server 2005服務器上。
謝謝!
喬,工作很好。我從來不知道WITH子句,從來沒有使用OVER或PARTITION。你能簡單地告訴我他們在做什麼嗎?我查看了他們,但現在確定我找到了正確的信息。 – RyanF 2011-01-20 20:24:01