2011-02-04 86 views
1

我想了幾個小時找出正確的SQL查詢從表(MySQL中)選擇最新的歷史記錄。無法找出正確的SQL查詢歷史表記錄

在我的應用程序中,我想保留每個數據修改的歷史記錄。所以我的想法是,而不是對現有記錄進行更新,而是對新記錄進行INSERT。此外,還有一個修訂版計數器,隨着每個記錄修改而增加。

這是我的表:

 
uid rid created_by deleted revision username password admin 
1 1  0   0  0  stefan abcdefg  1 
2 2  1   0  0  maria  bcdefgh  1 
3 3  1   0  0  carl  cdefghi  0 
4 4  1   0  0  SUSANN ABC123  0 
5 4  1   0  1  SUSANN 123ABC  0 
6 4  1   0  2  SUSANN 123ABC  1 
7 4  1   1  3  SUSANN 123ABC  1 

注UID爲4至7實際上是相同的記錄即「蘇珊」,行。第4行是第一行。第5行修改了密碼,第6行修改了管理標誌,第7行修改了刪除標誌。

uid是一個自動遞增器,併爲內部目的標識表中的行。 rid是實際的記錄ID。

現在。選擇單條記錄的最新版本可以做到這樣:

SELECT * FROM表 WHERE RID = 4 ORDER BY修訂DESC LIMIT 1

我的問題是選擇的所有最新名單所有登錄修訂:根據樣本數據結果集應該是:

 
uid rid created_by deleted revision username password admin 
1 1  0   0  0  stefan abcdefg  1 
2 2  1   0  0  maria  bcdefgh  1 
3 3  1   0  0  carl  cdefghi  0 
7 4  1   1  3  SUSANN 123ABC  1 

有人能指出我在正確的方向。我認爲正確的關鍵字已經足夠了。從那裏我可以想出一個辦法。

謝謝。

回答

2

這應該工作:

SELECT t.* 
FROM table t 
JOIN (SELECT rid, MAX(revision) MaxRevision FROM table GROUP BY rid) mt 
ON t.rid = mt.rid AND t.revision = mt.MaxRevision 
+0

就是這樣......除了一個小錯字,它正是我想要的。謝謝拉瑪克。 – 2011-02-04 22:06:07