ROWNUM 질문. 0 2 791

by 띵똥 [2018.01.28 15:08:36]


MAX조건.PNG (26,323Bytes)
MAX조건1.PNG (12,491Bytes)

SELECT MAX(A.DE)
          FROM TC_CALENDAR   A   
         WHERE A.HOLIDAY_CHCK   = 'N'   
           AND A.DFK            != 7   
           AND A.DE             >= '20180112'   
           AND ROWNUM           <= DECODE(SUBSTR('4001171307861',13),'2',20,'5',20,30);

조회시 휴일제외 30일이후일자('20180226')가 나와야하는데 10달후 날짜가 나오네요..

위 쿼리를 조회한 결과와 order by를 추가한 결과가 다르던데... 이유가 무었인지 몰라 질문을 올립니다..

by 우리집아찌 [2018.01.29 12:47:43]

ROWNUM 정렬을 뜻하지 않습니다. ROWNUM은 출력된 DATA 순번을 뜻합니다. 

정렬되지 않을경우 DATA가 뒤섞여 있을수 있습니다. ORDER BY 구문이 정렬을 뜻합니다.


by 마농 [2018.01.30 10:11:27]

글쎄요? 일부만 캡쳐해 올리셔서..
ORDER BY 를 붙이신 건지 아닌지 판단이 안서네요.
해당 컬럼 de 에 인덱스가 있는지 확인하셔야 하구요.
각각의 쿼리의 실행계획을 확인하셔야 합니다.
어찌 되었든 간에 가장 핵심은 Order By 가 없이는 정렬된 결과가 보장되지 않는다는 것입니다.

SELECT MAX(de)
  FROM (SELECT de
          FROM tc_calendar
         WHERE holiday_chck  = 'N'   
           AND dfk          != 7   
           AND de           >= '20180112'
         ORDER BY de
        )
 WHERE ROWNUM <= DECODE(SUBSTR('4001171307861', 13), '2', 20, '5', 20, 30)
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입