본문 바로가기
데이터베이스[DB]/MSSQL

[MS-SQL] LAG, LEAD - 이전/이후 행 가져오기

by 낭만의개꿈 2025. 12. 19.
반응형

 

이전의 정보나 다음의 정보를 하나의 로우로 확인해야 하는 경우들에 사용되는 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

 

#temp_part 조회

 

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

next_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

두번째의 next_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

Previous 부품조회

 

LAG 도 LEAD 와 마찬가지로 사용할 수 있으며, LEAD 와 반대로 이전 로우의 정보를 보여줄 수 있다.

또한, 두번째 전의 로우의 정보를 가져오는 것도 동일하게 가능하다.

 

2024.03.12 - [데이터베이스[DB]/MSSQL] - [MSSQL] RANK, DENSE_RANK, ROW_NUMBER, PARTITION BY 차이

반응형