O mesmo efeito pode ser replicado no Oracle usando o
first_value() função ou usando uma das funções rank() ou row_number() funções. Ambas as variantes também funcionam no Postgres.
first_value() select distinct col1,
first_value(col2) over (partition by col1 order by col2 asc)
from tmp
first_value dá o primeiro valor para a partição, mas o repete para cada linha, então é necessário usá-lo em combinação com distinct para obter uma única linha para cada partição. row_number() / rank() select col1, col2 from (
select col1, col2,
row_number() over (partition by col1 order by col2 asc) as rownumber
from tmp
) foo
where rownumber = 1
Substituindo
row_number() com rank() neste exemplo produz o mesmo resultado. Uma característica desta variante é que ela pode ser usada para buscar o primeiro N linhas para uma determinada partição (por exemplo, "últimos 3 atualizados") simplesmente alterando
rownumber = 1 para rownumber <= N .