2017-07-25 60 views
0

提取數據我有列的表結構類似以下內容:從最大場

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 

鑑於表的大小,這只是一個較大的拉的一部分,我會喜歡看看是否有一個更優雅/更簡單的方式直接拉這個。

回答

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以獲取不確定的行。

+0

謝謝,只要有機會,我會潛入。好消息是,ID /線路組合是一個唯一的標識符。 – user3654225