神谕。我如何 select 组中的第一行

Oracle. How do I select first row in a group

我有数据 (SELECT * FROM t) 看起来像那样

ID | VERSION | ...
====================
1  |    2    | ...
1  |    1    | ...
2  |    3    | ...
2  |    2    | ...
2  |    1    | ...
....

我如何才能只取每个唯一 ID 值的第一行(最大版本)?

ID | VERSION | ...
====================
1  |    2    | ...
2  |    3    | ...
....

尝试

select t.ID, MAX(t.version) as version from t
group by t.ID

注意:版本是一个保留字,所以我建议选择一些其他的列名。


所有结果:

select *
  from t
 where (t.ID, t.version) in
       (select t.ID, MAX(t.version) as version from t group by t.ID)

您可以使用 row_number 分析函数对每个 ID 列的行进行排名,然后仅过滤掉 rnb = 1 的行:

select *
from (
select t.*, row_number()over(partition by ID order by VERSION desc) rnb
from Your_table t
)
where rnb = 1
;