无法找出历史表记录的正确SQL查询

时间:2011-02-04 15:11:47

标签: sql mysql history greatest-n-per-group

我尝试了几个小时来找出正确的SQL查询,从表中选择最新的历史记录(在MySQL中)。

在我的应用程序中,我想保留每次数据修改的历史记录。所以我的想法是,而不是对现有记录进行更新,我宁愿对新记录进行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的行实际上是相同的记录,即" SUSANN"。第4行是第一行。第5行修改了tha密码,第6行修改了admin-flag,第7行修改了deleted-flag。

uid 是一个自动递增器,用于内部标识表中的行。 rid 是实际的记录ID。

现在。选择单个记录的最新版本可以这样做:

SELECT * FROM table 在哪里摆脱= 4 ORDER BY版本DESC 限制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

有人能指出我正确的方向吗?我认为正确的关键词已经足够了。从那里我可能想出办法。

感谢。

1 个答案:

答案 0 :(得分: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