데이터로그😎
[윈도우 함수] Lead, Lag 함수 본문
이전에 발행한 윈도우 함수 관련 글 ↓
Leet Code를 풀고 있는데, 이전 row와 다음 row를 참조해야 하는 문제가 있었다...!이 때는 LEAD, LAG함수를 사용하면 된다.
Lead, Lag 역시 row_number나 rank와 같이 Window function이다.
- LEAD(): 현재 행 다음의 행에 있는 열 값을 가져옴
- LAG(): 현재 행 이전의 행에 있는 열 값을 가져옴
Stadium이라는 테이블이 아래와 같다고 가정하자.
"+------+------------+-----------+
| id | visit_date | people |
+------+------------+-----------+
| 1 | 2017-01-01 | 10 |
| 2 | 2017-01-02 | 109 |
| 3 | 2017-01-03 | 150 |
| 4 | 2017-01-04 | 99 |
| 5 | 2017-01-05 | 145 |
| 6 | 2017-01-06 | 1455 |
| 7 | 2017-01-07 | 199 |
| 8 | 2017-01-09 | 188 |
+------+------------+-----------+
만약 Stadium 테이블에서 LEAD, LAG를 적용하면 어떤 결과가 나올까?
SELECT
id,
visit_date,
people,
LAG(people, 1) OVER (ORDER BY id) AS lag1_people,
LAG(people, 2) OVER (ORDER BY id) AS lag2_people,
LEAD(people, 1) OVER (ORDER BY id) AS lead1_people,
LEAD(people, 2) OVER (ORDER BY id) AS lead2_people
FROM Stadium;
다음과 같은 결과가 나오게 된다.
+----+------------+--------+-------------+-------------+--------------+--------------+
| id | visit_date | people | lag1_people | lag2_people | lead1_people | lead2_people |
+----+------------+--------+-------------+-------------+--------------+--------------+
| 1 | 2017-01-01 | 10 | NULL | NULL | 109 | 150 |
| 2 | 2017-01-02 | 109 | 10 | NULL | 150 | 99 |
| 3 | 2017-01-03 | 150 | 109 | 10 | 99 | 145 |
| 4 | 2017-01-04 | 99 | 150 | 109 | 145 | 1455 |
| 5 | 2017-01-05 | 145 | 99 | 150 | 1455 | 199 |
| 6 | 2017-01-06 | 1455 | 145 | 99 | 199 | 188 |
| 7 | 2017-01-07 | 199 | 1455 | 145 | 188 | NULL |
| 8 | 2017-01-09 | 188 | 199 | 1455 | NULL | NULL |
+----+------------+--------+-------------+-------------+--------------+--------------+
'SQL > MySQL' 카테고리의 다른 글
[MySQL] 날짜형식 관련 함수 (0) | 2023.12.29 |
---|---|
[MySQL] REGEXP 함수 (1) | 2023.12.20 |
[윈도우 함수] RANK() OVER() (0) | 2023.11.24 |
[집계 함수] GROUP BY, GROUPING (0) | 2023.09.08 |
REPLACE, SUBSTR, LPAD, TRIM (0) | 2023.09.08 |