我尝试了几个小时来找出正确的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
有人能指出我正确的方向吗?我认为正确的关键词已经足够了。从那里我可能想出办法。
感谢。
答案 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