안녕하세요.
오늘은 SQL에서 대표적인 윈도우 함수 LAG와 LEAD에 대해서 알아보겠습니다.
MySQL 윈도우 함수 LAG & LEAD
▣ 윈도우 함수란?
행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수
- SUM, MAX와 같은 집계함수나 RANK와 같은 순위함수, 분석함수 등이 윈도우 함수로 알려져있음.
▣ LAG & LEAD 함수
- 현재행(Current Row) 기준으로 위쪽(이전) 값들과 아래쪽(이후) 값들을 다뤄야 할 때 사용됨.
: 예시 데이터(login_data) - MS SQL Server 사용
--예시 데이터 생성
CREATE TABLE login_data
([id] varchar(3), [login_date] datetime)
;
INSERT INTO login_data
([id], [login_date])
VALUES
('a20', '2022-01-03 00:00:00'),
('a20', '2022-04-04 00:00:00'),
('a20', '2022-08-07 00:00:00'),
('a20', '2022-12-11 00:00:00'),
('b11', '2020-01-03 00:00:00'),
('b11', '2021-08-03 00:00:00'),
('b11', '2022-01-17 00:00:00'),
('c30', '2021-03-04 00:00:00'),
('c30', '2021-06-01 00:00:00')
;
: LAG()
LAG (expr[, offset]) OVER (
[ PARTITION BY partition_expr ] [ ORDER BY order_list ] )
- LAG Function을 통해서 id마다 이전 로그인 시간을 알 수 있는 prev_login Column까지 조회할 수 있음.
- 이전 로그인 시간이 없을 경우 null 처리됨.
SELECT id, login_date, LAG(login_date,1) OVER (
PARTITION BY id
ORDER BY login_date ) prev_login
FROM
login_data;
: LEAD()
LEAD (expr[, offset]) OVER (
[ PARTITION BY partition_expr ] [ ORDER BY order_list ] )
- LEAD Function을 통해서 id마다 이후 로그인 시간을 알 수 있는 next_login Column까지 조회할 수 있음.
- 이후 로그인 시간이 없을 경우 null 처리됨.
SELECT id, login_date, LEAD(login_date,1) OVER (
PARTITION BY id
ORDER BY login_date ) next_login
FROM
login_data
반응형
'Programming > SQL' 카테고리의 다른 글
[MySQL] JSON 데이터 다루기 (1) | 2022.12.14 |
---|---|
[MySQL] Signed, Unsigned 비교 및 차이 (1) | 2022.12.12 |
[MySQL] 시간 및 날짜 계산하기 (2) | 2022.12.11 |
[MySQL] 월 말일/첫일 구하기 (2) | 2022.12.10 |
[MySQL] Rand 함수로 난수 뽑기 (0) | 2022.12.07 |
댓글