Efek yang sama dapat direplikasi di Oracle baik dengan menggunakan first_value()
fungsi atau dengan menggunakan salah satu rank()
atau row_number()
fungsi.
Kedua varian juga berfungsi di Postgres.
first_value()
select distinct col1,
first_value(col2) over (partition by col1 order by col2 asc)
from tmp
first_value
memberikan nilai pertama untuk partisi, tetapi mengulanginya untuk setiap baris, sehingga perlu digunakan dalam kombinasi dengan distinct
untuk mendapatkan satu baris untuk setiap partisi.
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
Mengganti row_number()
dengan rank()
dalam contoh ini menghasilkan hasil yang sama.
Fitur varian ini adalah dapat digunakan untuk mengambil N pertama baris untuk partisi tertentu (mis. "3 terakhir diperbarui") cukup dengan mengubah rownumber = 1
ke rownumber <= N
.