oracle select 우선순위 쿼리를 어떻게 작성해야할까요 0 5 783

by 박정훈 [SQL Query] [2017.11.09 17:00:39]


먼저 DB Table에는 대량의 날짜정보를 가지고 있는 데이터들이 있는데 select 쿼리 중 date 형식의 칼럼의 특정시간(9시)의 데이터만 먼저 select하고 싶습니다.

특정시간 이외의 시간의 데이터들도 결국에는 모두 select가 되야합니다.

한select쿼리내에서 해당 기능을 구현해야되는데 어떻게 가능할까요??..

 

--원본 쿼리

 

SELECT *
FROM TABLE 
WHERE STAT = '0'           
AND TARGETDATE <= TO_DATE(SYSDATE, 'YYYYMMDDHH24MISS') 
AND ROWNUM <= #{fetchCount}

]]>

기존 쿼리 입니다. 

 

해당 select는 현재 시간 이전 TARGETDATE 들은 순서구분없이 모두 select하도록 되어있습니다.

 

before table data  select 순서 : 1, 2, 3

KEY TARGETDATE MSG
1 201711091500 test
2 201711090900 test
3 201711091540 test

after table data  select 순서 : 2, 1, 3   (반드시 09:00부터 select)

key TARGETDATE MSG
1 201711091500 test
2 201711090900 test
3 201711091540 test

 

 

해당 기능이 쿼리문으로만 해결이 가능할까요? 답변부탁드립니다 감사합니다!

by 마농 [2017.11.09 17:09:41]

원본 대비 결과표 예시를 보여주세요.


by 강재민 [2017.11.09 17:19:21]

안녕하세요^^


by 마농 [2017.11.09 18:29:19]

기존 쿼리에 문제가 있습니다.
  - TO_DATE(SYSDATE, 'YYYYMMDDHH24MISS') 이 구문은 날짜를 날짜로 바꾼다는 이상한 구문이구요
  - TARGETDATE 의 자료형이 날짜인지 문자인지 궁금합니다.


by 마농 [2017.11.09 18:35:39]
SELECT *
  FROM (SELECT *
          FROM table
         WHERE stat = '0'
           AND targetdate <= sysdate
         ORDER BY DECODE(TO_CHAR(targetdate, 'hh24'), '09', 1, 2), targetdate
        )
 WHERE ROWNUM <= #{fetchCount}
;

 


by 박정훈 [2017.11.10 11:01:43]

답변 감사합니다! SYSDATE는 기존코드값말고 현재시간이라는 뜻이였는데 질문에 해당 내용이 누락된거같습니다 ㅠㅠ

TARGETDATE의 자료형은 date 입니다!

 

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