본문 바로가기
오라클 게시판/오라클 함수

【오라클(Oracle) SQL 함수】 LAST_VALUE 함수

by 기서무나구물 2018. 11. 24.

포스팅 목차


    o LAST_VALUE

     


    문 법

     

    last_value::=

     

     

    목 적

    LAST_VALUE 분석 함수는 윈도우 그룹(또는 전체 데이터) 별로 데이터를 정렬 후 지정한 변수의 마지막 값을 반환한다.

    LAST_VALUE함수는 분석함수이다. 순서형 집합에서 마지막 값을 반환한다. 만약 집합 내의 마지막 값이 Null이라면, 그 함수는 IGNORE NULL을 지정하지 않은 한 Null을 반환한다. 이 설정은 데이터의 정밀화에 유용하다. 만약 IGNORE NULL을 지정하면, 그때 LAST_VALUE함수는 집합 내에서 최초 Non-Null 값을 반환하거나, 만약 모든 값이 Null이라면 NULL을 반환한다.

    expr에 대하여 LAST_VALUE 또는 임의의 다른 분석 함수를 이용할 수 없다. 분석함수는 중첩할 수 없지만, expr에 대하여 다른 이미 만들어진 함수 표현을 이용할 수 있다.

     


    패키지 함수 비교(Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table)

     


    관련 함수

    함수명 함수내용
    FIRST 그룹별 또는 전체 데이터에 대하여 FIRST와 LAST 함수는 데이터를 정렬한 후 그룹별(전체 데이터) FIRST(최초) 또는 LAST(최종) 값을 선택하여 지정한 작업을 수행한다.
    FIRST_VALUE 그룹(또는 전체 데이터) 별로 데이터를 정렬 후 지정한 변수의 첫 번째 값을 반환한다.
    LAG n-th 이전 시차 값을 계산한다.
    LAST FIRST and LAST함수는 매우 유사한 함수이다. 양쪽 함수 모두 그룹별 또는 전체 데이터에 대하여 데이터를 지정한 정렬 순서 기준으로 정렬한 후 그룹별(또는 전체 데이터) FIRST(최초) 또는 LAST(최종) 값을 선택하여 지정한 작업을 수행한다.
    LAST_VALUE 윈도우 그룹(또는 전체 데이터) 별로 데이터를 정렬 후 지정한 변수의 마지막 값을 반환한다.
    LEAD Self 조인 작업을 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. 쿼리에서 수행되는 행의 Series나 커서의 위치를 지정하면, LEAD 함수는 해당 위치 이후에 존재하는 물리적 Offset의 행에 ACCESS 한다.

     


    예 제

    다음 에제는 급여가 가장 많은 종업원의 대하여 고용 개시일을 각행에 반환한다.

    Oracle Program
    SELECT last_name, salary, hire_date,
           (LAST_VALUE(hire_date) OVER ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
    FROM (SELECT * FROM employees WHERE department_id = 90
          ORDER BY hire_date);

     

    Results
    LAST_NAME                     SALARY HIRE_DATE LV
    ------------------------- ---------- --------- ---------
    Kochhar                        17000 21-SEP-89 17-JUN-87
    De Haan                        17000 13-JAN-93 17-JUN-87
    King                           24000 17-JUN-87 17-JUN-87

     


    이 예제에서는 LAST_VALUE함수의 비결정적인 성질을 설명한다. Kochhar과 De Haan는 같은 급여가 같기 때문에, 인접한 행에 있다. Kochhar은 subquery에서 행은 고용일 순으로 있기 때문에 처음에 나타난다. 그러나, 만약 행이 고용일 기준으로 내림차순이라면, 함수는 다른 값을 반환한다.

    Oracle Program
    SELECT last_name, salary, hire_date,
           LAST_VALUE(hire_date) OVER (ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
    FROM   (SELECT * FROM employees WHERE department_id = 90 
            ORDER BY hire_date DESC);

     

    Results
    LAST_NAME                     SALARY HIRE_DATE LV
    ------------------------- ---------- --------- ---------
    De Haan                        17000 13-JAN-93 17-JUN-87
    Kochhar                        17000 21-SEP-89 17-JUN-87
    King                           24000 17-JUN-87 17-JUN-87

     


    다음 두 개의 예제는 Unique key에 의해 LAST_VALUE 함수가 어떻게 사용되는지 결정적으로 보여준다. salary와 hire_date에 의해 정렬되어서, subquery에서 순서임에도 불구하고 같은 결과를 보인다.

    Oracle Program
    SELECT last_name, salary, hire_date, 
           LAST_VALUE(hire_date) OVER (ORDER BY salary, hire_date 
           ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
    FROM   (SELECT * FROM employees WHERE department_id = 90 
            ORDER BY hire_date);

     

    Results
    LAST_NAME                     SALARY HIRE_DATE LV
    ------------------------- ---------- --------- ---------
    Kochhar                        17000 21-SEP-89 17-JUN-87
    De Haan                        17000 13-JAN-93 17-JUN-87
    King                           24000 17-JUN-87 17-JUN-87

     


    Oracle Program
    SELECT last_name, salary, hire_date, 
           LAST_VALUE(hire_date) OVER (ORDER BY salary, hire_date
           ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
    FROM   (SELECT * FROM employees WHERE department_id = 90 
            ORDER BY hire_date DESC);

     

    Results
    LAST_NAME                     SALARY HIRE_DATE LV
    ------------------------- ---------- --------- ---------
    Kochhar                        17000 21-SEP-89 17-JUN-87
    De Haan                        17000 13-JAN-93 17-JUN-87
    King                           24000 17-JUN-87 17-JUN-87

     


    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크
    반응형

    댓글