나의 분석일기 ♬
[SQL] first_value() / last_value() 함수 본문
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 |