All thing of the world!

Oracle LAST_VALUE 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle LAST_VALUE 설명 : 오라클 함수

WorldSeeker 2021. 4. 2. 20:58

1. 함수의 목적 

    Oracle LAST_VALUE는
분석용함수로, 정렬한 집합의 마지막 값을 리턴한다.

2. 샘플을 통한 개념 퀵뷰

가장 높은 급여를 받은 직원의 고용일을 LV로 반환.

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);

   
3. 사용방법         


* 참고 : 두 가지 형태의 사용방법 중 위쪽이 ANSI 포멧이다. ANSI포멧을 사용할 것을 추천한다.

4. 함수 PARAMETER 설명

[expr]

LAST_VALUE로  반환할 컬럼을 입력하는 입력 파라미터다.

[IGNORE][RESPECT][NULLS]

{REPECT | IGNORE} NULLS는 expr의 NULL 값이 펑션의 계산에 포함되는지 여부를 결정한다.
기본값은 RESPECT NULLS이다.
IGNORE NULLS를 지정하면 FIRST_VALUE는 집합의 NULL이 아닌 값중 첫번째 값을을 반환하고 모든 값이 NULL이면 NULL을 반환한다.



5. 다양한 샘플표현

example1)  다음 두 예제는 unique key 순서화하여 LAST_VALUE 함수를 소팅 순서를 보장하는 방법을 보여준다.
salary와 hire_date로 함수내에서 순서를 지정하면 하위 쿼리의 순서에 관계없이 동일한 결과를 보장할 수 있다.

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)
ORDER BY last_name, salary, hire_date;

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)
ORDER BY last_name, salary, hire_date;


example2) logical offset(ROWS 대신 RANGE)을 사용하면 함수가 순서를 보장할 수 있다.
ORDER BY 표현식에 대한 중복이 발견되면 LAST_VALUE는 expr의 가장 높은 값을 취한다.


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

 

Comments