Den samme effekt kan replikeres i Oracle enten ved at bruge first_value() funktion eller ved at bruge en af rank() eller row_number() funktioner.
Begge varianter fungerer også i Postgres.
first_value()
select distinct col1,
first_value(col2) over (partition by col1 order by col2 asc)
from tmp
first_value giver den første værdi for partitionen, men gentager den for hver række, så det er nødvendigt at bruge den i kombination med distinct for at få en enkelt række for hver partition.
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
Erstatter row_number() med rank() i dette eksempel giver det samme resultat.
En funktion ved denne variant er, at den kan bruges til at hente det første N rækker for en given partition (f.eks. "sidste 3 opdaterede") blot ved at ændre rownumber = 1 til rownumber <= N .