반응형

이전의 정보나 다음의 정보를 하나의 로우로 확인해야 하는 경우들에 사용되는 LAG, LEAD 에 대해서 알아보도록 하자.
SQL Server 2012 부터 추가된 함수이며, 이전 로우와 다음 로우 값을 비교하는 등 데이터 확인을 할 때에 많은 도움을 주는 함수이다.
Create Data
CREATE TABLE #temp_part
(
[part_cd] varchar(10) NOT NULL,
[part_nm] varchar(50) NOT NULL
)
INSERT INTO #temp_part VALUES ('A001', '1번부품')
INSERT INTO #temp_part VALUES ('A002', '2번부품')
INSERT INTO #temp_part VALUES ('A003', '3번부품')
INSERT INTO #temp_part VALUES ('A004', '4번부품')
INSERT INTO #temp_part VALUES ('A005', '5번부품')
INSERT INTO #temp_part VALUES ('A006', '6번부품')
INSERT INTO #temp_part VALUES ('A007', '7번부품')
SELECT * FROM #temp_part

LEAD
- 다음 로우의 값을 가져온다.
- SQL SERVER 2012 부터 사용 가능한 함수
SELECT * ,
LEAD(part_nm) OVER(ORDER BY part_cd) AS next_part
FROM #temp_part

LEAD 와 OVER(ORDER BY parts_cd) 로 1번 부품의 다음 정렬인 2번 부품이 next_part 로 보여지게 된다. 첫번째 다음 로우가 아닌 두번째 로우를 가져오는 것도 가능하다.
LEAD(part_nm, 2) 라고 명시하여 2칸 뒤의 값을 가져오는 것이다.
SELECT * ,
LEAD(part_nm, 2) OVER(ORDER BY part_cd) AS next_part
FROM #temp_part

LAG
- 이전 로우의 값을 가져온다.
- SQL SERVER 2012 부터 사용 가능한 함수
SELECT * ,
LAG(part_nm) OVER(ORDER BY part_cd) AS first_pre_part,
LAG(part_nm, 2) OVER(ORDER BY part_cd) AS secont_pre_part
FROM #temp_part

LAG 도 LEAD 와 마찬가지로 사용할 수 있으며, LEAD 와 반대로 이전 로우의 정보를 보여줄 수 있다.
또한, 두번째 전의 로우의 정보를 가져오는 것도 동일하게 가능하다.
2024.03.12 - [데이터베이스[DB]/MSSQL] - [MSSQL] RANK, DENSE_RANK, ROW_NUMBER, PARTITION BY 차이
반응형
'데이터베이스[DB] > MSSQL' 카테고리의 다른 글
| [MS-SQL] CONVERT, FORMAT, YEAR, MONTH, DAY (0) | 2025.12.25 |
|---|---|
| [MS-SQL] 교집합, 부분집합 - JOIN ( INNER, LEFT, RIGHT, FULL ) (0) | 2025.12.24 |
| [MS-SQL] 동일 VIEW 조회 시, 쿼리 속도 차이발생 ( Index, Order by ) (0) | 2025.12.23 |
| [MS-SQL] SSMS 생산성 올리는 꿀팁 : 세로 편집 모드 (0) | 2025.12.22 |
| [MS-SQL] DELETE, DROP, TRUNCATE (0) | 2025.04.06 |
| [MS-SQL] LEFT,RIGHT,SUBSTRING, LEN - 문자열함수 (0) | 2025.03.25 |
| [MS-SQL] DATEPART, DATENAME - 일자(요일,주차,분기) 함수 (0) | 2025.03.21 |
| [MS-SQL] UNION, UNION ALL (0) | 2025.03.18 |