나의 분석일기 ♬

[SQL] first_value() / last_value() 함수 본문

Tools/SQL

[SQL] first_value() / last_value() 함수

Screening Jang 2023. 3. 21. 18:08

first_value() / last_value() 함수

window에서 order by로 기술된 순으로 가장 첫번째/가장 마지막에 위치한 데이터를 가져옴

 

● first_value() : window의 가장 첫번째에 위치한 데이터를 가져옴
● last_value() : window의 가장 마지막에 위치한 데이터를 가져옴

 

partition by는 생략 가능하지만, order by는 반드시 필요함
window 절 생략가능(기본값은 range between unbounded preceding and current row)

 

(ex)

first_hire_sal은 부서 별 고용일 오름차순 기준으로 가장 첫번째(오래된) 고용일의 sal 값을 출력함

last_hire_sal은 부서 별 고용일 오름차순 기준으로 가장 마지막(최근) 고용일의 sal 값을 출력함

-> 하지만 출력 결과가 좀 이상한 것을 알 수 있음. 이유는 last_value() 함수의 window절 기본값에 있음

last_hire_sal_1  : 알맞게 window 절을 설정해줌    /    last_hire_sal_2 : window 절 기본값으로 했을 때

last_value() 함수에서 window절을 설정해주지 않을 시 기본값이 rows between unbounded preceding and current row 로 바운드 되지않은 행과 현재 행 사이의 값에서 고용일 기준 가장 최근의(마지막) value를 출력하기에 자기 자신이 나오는 것을 알 수 있음.

부서 별로 고용일 기준 가장 최근의 값만 알고 싶은 경우 window절을 rows between unbounded preceding and unbounded following 로 설정해주면  됨

 

(ex) last_value() over(order by .. asc) 대신 first_value() over(order by .. desc) 적용 가능

 위에서 나온 문제점을 보완하기 위해 정렬기준을 내림차순으로 한 후 first_value() 함수를 사용할 수도 있음

'Tools > SQL' 카테고리의 다른 글

[SQL] 역분위함수 - percentile_disc() / percentile_cont()  (0) 2023.03.21
[SQL] 순위 함수 - cume_dist, percent_rank, ntile  (0) 2023.03.21
[SQL] lead()/lag() 함수  (0) 2023.03.21
[SQL] JOIN(조인)  (0) 2023.03.18
[SQL] SQL 기본 문법  (0) 2023.03.18
Comments