SELECT *
FROM (
SELECT a.*, ROWNUM AS rnum
FROM (
SELECT order_id, order_dt, amount
FROM orders
WHERE status_cd = 'DONE'
ORDER BY order_dt DESC
) a
WHERE ROWNUM <= 30 -- 끝 지점: 여기서 미리 잘라 냅니다
)
WHERE rnum > 20; -- 시작 지점3중 구조인 이유가 있습니다. 가장 안쪽에서 정렬하고, 중간에서 ROWNUM으로 끝까지만 잘라 내고, 바깥에서 시작 지점을 거릅니다. 중간 단계에서 미리 자르는 것이 성능의 핵심이라 이 형태를 함부로 단순화하면 느려집니다.