我有一个表结构,其列类似于以下内容:
ID | line | value
1 | 1 | 10
1 | 2 | 5
2 | 1 | 6
3 | 1 | 7
3 | 2 | 4
理想情况下,我想提出以下内容:
ID | value
1 | 5
2 | 6
3 | 4
一种解决方案是执行以下操作:
select a.ID, a.value
from
myTable a
inner join (select id, max(line) as line from myTable group by id) b
on a.id = b.id and a.line = b.line
考虑到桌子的大小,这只是一个更大的拉动的一部分,我想看看是否有更优雅/更简单的方式直接拉动它。
答案 0 :(得分:2)
这是OLAP功能的任务:
select *
from myTable a
qualify
rank() -- assign a rank for each id
over (partition by id
order by line desc) = 1
如果每个ID共享相同的最大行,则可能会返回多行。如果您只想返回其中一个,请在order by
添加另一列以使其唯一,或切换到row_number
以获得不确定的行。