Skip Headers

오라클 10g 함수
10g Release 1 (10.1)
Go to Documentation Home
HOME
Go to Book List
ORA_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
ORA_10G
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

LAST_VALUE

문법

MAIN

last_value::=
Description of last_value.gif follows
Description of the illustration last_value.gif


:

"Analytic Functions " for information on syntax, semantics, and restrictions, including valid forms of expr

목적

MAIN

FIRST_VALUE 분석 함수는 윈도우에서 정렬된 값 중에서 첫 번째 값을 반한.
LAST_VALUE 분석 함수는 윈도우에서 정렬된 값중에서 마지막 값을 반환.

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

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

예제

MAIN

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

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

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에서 행은 고용일 순으로 있기 때문에 처음에 나타난다. 그러나, 만약 행이 고용일기준으로 내림차순이라면, 함수는 다른 값을 반환한다.

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

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에서 순서임에도 불구하고 같은 결과를 보인다.

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

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

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

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