가장 높은 수, 낮은 수 출력
nsm530 수험생

답변 채택시 : 0코아

답변 2 추천 0 조회 3707 2014.07.10
select empno, HIREDATE, WORK_DAY
from
(select empno, to_char(hiredate,'YYYY/MM/DD HH24:MI:SS') HIREDATE
       ,to_date('20060805')-hiredate WORK_DAY
from emp 
where sal>0 
order by WORK_DAY desc)

where rownum=1 or ???????

근무일이 가장 높은 사람과 낮은 사람 추출하려고 하는데.. 뷰 써서 정렬하고 첫 번째꺼 그냥 가져왔습니다..;; 가장 낮은 건 어떻게 써야대는지 모르겠네요..
그리고 뷰 안쓰고 select절에서 바로 구하는 함수는 없나요? 뒤져보니 top이란 함수가 있던거 같은데 mysql에서만 사용되는거 같구요..;; oracle 11g입니다
댓글 (0)
목록 답변등록
가장 높은 수, 낮은 수 출력
gosdhong 2014.08.05

select empno

        , to_char(hiredate,'YYYY/MM/DD HH24:MI:SS') HIREDATE

        , to_date('20060805')-hiredate WORK_DAY
        , FIRST_VALUE(to_date('20060805')-hiredate) OVER(PARTITION BY  empno order by hiredate ) max_work_day
        , LAST_VALUE(to_date('20060805')-hiredate) OVER(PARTITION BY  empno order by hiredate ) min_work_day
from emp 
where sal>0 

 

댓글 (0)
가장 높은 수, 낮은 수 출력
goal83 2014.07.10

질문자로부터 답변이 채택 되었습니다.

만약 hiredate에 인덱스가 있다면 아래 와 같은 쿼리를
idx01 = hiredate+....
select /*+index_asc(a idx01)*/ * from emp
where rownum <= 1
union all
select /*+index_desc(a idx01)*/ * from emp
where rownum <= 1;

만약 hiredate를 선두로 하는 인덱스가 없다면 아래와 같은 쿼리를 
select * from (
  select * from emp
  order by hiredate desc)
where rownum <= 1
union all
select * from (
  select * from emp
  order by hiredate asc)
where rownum <= 1;

사용하시면 될것 같습니다. 





댓글 (1)