神谕。我如何 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
;
我有数据 (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
;