2011-02-04 95 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