Rownum & Order By Oracle

Hello there,
berbagi sedikit tips dan trik nih

Malam ini Saya sedikit dipusingkan dengan fungsi Rownum yang tidak berkolaborasi dengan fungsi Order By Oracle. Maksud saya begini, saya ingin mendapatkan 10 data teratas berdasarkan selisih nilai tabel. Awalnya saya memakai query seperti ini.

SELECT *
FROM TIME_SUCCESS_COMMAND
WHERE COMMAND_TYPE = 'Open'
AND ROWNUM <=10
ORDER BY DIFFERENCE ASC

maka kita akan mendapatkan hasil yang salah, karena nbaris yang ditampilkan adalah sebelum proses ORDER.Oracle akan mengambil n baris pertama tanpa mengurutkan, kemudian dari n baris yg dihasilkan baru diurutkan. Jadi query yg benar adalah:

SELECT *
FROM (
	SELECT *
	FROM TIME_SUCCESS_COMMAND
	WHERE COMMAND_TYPE = 'Open'
	ORDER BY DIFFERENCE ASC
)
WHERE ROWNUM <=10');

Maka kita tidak pernah mendapatkan hasil apapun(kecuali nilai m <= 1), karena kondisi rownum >= m tidak akan pernah terpenuhi. Misalkan saja rownum >= 5, hasilnya tdk ada karena rownum selalu dimulai dari 1. Utk mencapai rownum ke 5 harus didapatkan dulu rownum ke-1 sampai 4 (yang ternyata tidak mungkin terpenuhi karena kondisi querynya: rownum >= 5).

Happy Coding All

maka kita tidak pernah mendapatkan hasil apapun
(kecuali nilai m <= 1), karena kondisi rownum >= m
tidak akan pernah terpenuhi.
Misalkan saja rownum >= 5, hasilnya tdk ada karena
rownum selalu dimulai dari 1. Utk mencapai rownum ke 5
harus didapatkan dulu rownum ke-1 sampai 4 (yg
ternyata tidak mungkin terpenuhi karena kondisi
querynya: rownum >= 5).