Oracle rownum dimulai dari 1, jadi Anda tidak akan pernah mendapatkan rownum pertama jika Anda mengatakan between 2 and N
.
Dibutuhkan satu baris untuk "memulai" urutan pseudocolumn rownum, jadi dengan menghilangkan rownum 1 dalam kriteria Anda, Anda menghilangkan semua rownum (atau setiap baris pada dasarnya memiliki rownum 0
).
Lihatlah seperti ini. Anda tidak mendapatkan ROWNUM sampai database mengembalikan baris kepada Anda. Baris pertama dari kriteria apa pun akan selalu menjadi ROWNUM 1.
Nah, trik yang bisa kamu gunakan adalah dengan menggunakan subquery. Setiap subquery akan memiliki rownumnya sendiri, dan jika Anda membuat alias ke nama kolom lain, Anda dapat menyimpannya ke dalam kueri luar, dan memperlakukannya sesuka Anda. Jadi jika Anda ingin menerapkan paging dari kumpulan hasil, Anda biasanya akan alias rownum dari hasil dalam sebagai rownum_ ke subquery luar untuk membatasi dengan ANTARA.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Tetapi perhatikan, bahwa kumpulan hasil luar akan memiliki rownum sendiri, jadi Anda dapat melakukan:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Anda akan melihat rownum
pada hasil akhir masih dimulai dari 1, tetapi hasil batin Anda akan memiliki rownum_
mulai dari 2.