SELECT ROW_NUMBER() OVER (ORDER BY TIME) SEQ FROM ACCESSTIME WHERE ROWNUM <= '20' ORDER BY SEQ;
ACCESSTIME Table에 데이터 조회시 30row 데이터가 조회 됩니다.
근데 rownum 으로 time 기준으로 20개의 데이터만 가져올려고 합니다.
위 쿼리 기준으로는 time 정렬이 정확하게 되지 않은 20개의 row 데이터를 가지고 오는데
Table 데이터는 30 Row고 rownum < 40 더 높게 주면 SORT가 정확하게된 기준으로 rownum 순으로 가지고 업니다.
SELECT ( SELECT ROWNUM, USRID FROM ACCESSTIME ORDER BY TIME ) WHERE ROWNUM < '20';
이렇게 기준으로 하면 정확하게 가져 옵니다.
ROW_NUMBER() OVER 저렇게 쓰면 안되는건가요?
where 절이 order by 절보다 먼저 수행됩니다.
정렬부터 하고 rownum 해야 하는데
rownum 부터 하니 원하는 자료가 안나오는 것입니다.
-- 1. ROWNUM 사용법 SELECT ROWNUM rn , usrid , time FROM (SELECT usrid , time FROM accesstime ORDER BY time ) WHERE ROWNUM <= 20 ;
-- 2. ROW_NUMBER 사용법 SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY time) rn , usrid , time FROM accesstime ) WHERE rn <= 20 ;