我有一个名为user_versions的表。由于要求,此表没有任何标识列。如果用户更新了他们的详细信息,则会创建一个新版本,名为version的列会增加1而另一个版本不再存在,但会再次保留,这是由于需求和新版本上线。
**My Problem**
Simple example
user_versions
------------
user_id|name|email|version
1|John|john@example.com|1
1|John|john@example.com|2
1|John|john@example.com|3
1|John|john@example.com|4
2|Peter|peter@example.com|1
2|Peter|peter@example.com|2
2|Peter|peter@example.com|3
Needed Results!!!
------------
1|John|john@example.com|4
2|Peter|peter@example.com|3
如果我想返回最新版本的每一个我怎么能这样做?我已经尝试了很多东西而无法解决这个问题。我能够通过两个单独的查询来完成,但如果我能在一个查询中返回所需的内容,我将非常感激。
任何帮助都会非常感谢。
答案 0 :(得分:1)
with cte as
(
select user_id,name,email,version, row_number() over (partition by user_id order by version desc) as rn
from
user_versions)
select user_id,name, email, version from cte
where rn = 1
答案 1 :(得分:1)
使用标准语法,它将是:
select uv.*
from user_versions uv
inner join(select user_id, max(version) as version
from user_versions
group by user_id) as t
on uv.user_id = t.user_id and
uv.version = t.version
答案 2 :(得分:0)
保持简单
SELECT user_id,name,email,max(version)
FROM user_versions.tt
group by user_id,name,email
答案 3 :(得分:0)
SELECT user_id, name, email, version
FROM (
SELECT user_id, name, email, version, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY version DESC) AS rank
FROM user_versions) uv
WHERE uv.rank = 1