Hetzelfde effect kan in Oracle worden gerepliceerd met behulp van de first_value()
functie of door een van de rank()
of row_number()
functies.
Beide varianten werken ook in Postgres.
first_value()
select distinct col1,
first_value(col2) over (partition by col1 order by col2 asc)
from tmp
first_value
geeft de eerste waarde voor de partitie, maar herhaalt deze voor elke rij, dus het is noodzakelijk om deze te gebruiken in combinatie met distinct
om een enkele rij voor elke partitie te krijgen.
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
Vervanging van row_number()
met rank()
in dit voorbeeld levert hetzelfde resultaat op.
Een kenmerk van deze variant is dat deze kan worden gebruikt om de eerste N . op te halen rijen voor een bepaalde partitie (bijv. "laatste 3 bijgewerkt") door simpelweg rownumber = 1
te wijzigen naar rownumber <= N
.