> MS-SQL에는 order by 로 정렬을 한것 가운데
> 1번째 레코드만 가져올 수 있는 방법이 있는데
>
> 오라클에도 이런 방법이 있나요?
> max를 사용해서 하는 방법 말구요
> max를 사용하면 max값의 다른 필드값은 가져올 수 가 없잖아요
> 결국 select 구문을 두번 사용하게 되는데
>
> select 구문을 한번만 사용해서 가능한지....
있지만 효율성이 떨어집니다.
subquery를 사용하면 됩니다.
SQL> select ename from emp order by ename desc
ENAME
----------
hun
WARD
TURNER
SCOTT
MILLER
MARTIN
KING
...
SQL> select ename from (select ename from emp order by ename desc)
2* where rownum < 2
SQL> /
ENAME
----------
hun
SQL>
단지 SQL문을 한번만 보내면 될 뿐 내부적으로으로는
max 값을 찾아서 이 max 값을 가지고 다시 쿼리하는 것과
어느 것이 효율이 좋은지는 반드시 테스트해 보고
사용하세요.
몇천건의 소량의 데이타와 수십만건 이상인 테이블에서
테스트 해보고 사용하는 것이 좋습니다.
인덱스 range scan을 할 경우는 실제 그 범위 안에서만 영향을 받게
될 것이므로 데이타 건수와도 조금은 영향이 적을 것이라고 생각되지만,
테스트 해보시고 ( 보통 천번 이상 loop를 돌리고 평균 값을 내면...)
결과를 올려주시는 것이 다른분들에게도 도움이 되지 않을까요?
|