본문 바로가기
Programming/SQL

[SQL] LAG & LEAD (그룹 내 행 순서)

by 코딩하는 금융인 2022. 12. 12.

안녕하세요.

오늘은 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

반응형

댓글