LAG 함수를 통해 이전 데이터의 값을 가져와 계산에 사용할 수 있다.
SQL Server2012버전 이후 부터 사용 가능하다.
사용방법
SELECT 문에 함수 작성.
LAG(컬럼명, 이전 행 수, 이전 행이 없을 때 기본값) OVER ( PARTITION BY 그룹으로 묶을 컬럼 리스트
ORDER BY 이전행을 찾을 때 사용할 정렬 기준)
파란색 으로 표시한 글자 생략 가능
/*********************************
* 이전 행 데이터 가져와 계산 TEST 쿼리
**********************************/
-- 1. TEST에 필요한 BASE DATA 만들기
SELECT A.ITEM
, A.VALUE
INTO #TEMP1
FROM (
SELECT 'A' ITEM, 1 VALUE UNION ALL
SELECT 'A' ITEM, 2 VALUE UNION ALL
SELECT 'A' ITEM, 3 VALUE UNION ALL
SELECT 'A' ITEM, 4 VALUE UNION ALL
SELECT 'A' ITEM, 5 VALUE UNION ALL
SELECT 'B' ITEM, 6 VALUE UNION ALL
SELECT 'B' ITEM, 7 VALUE UNION ALL
SELECT 'B' ITEM, 8 VALUE UNION ALL
SELECT 'B' ITEM, 9 VALUE UNION ALL
SELECT 'B' ITEM, 10 VALUE
) A
-- 2. BASE DATA 확인
SELECT *
FROM #TEMP1
-- 3. LAG 윈도우 함수 사용
SELECT ITEM
, VALUE
, LAG(VALUE,1,0) OVER( PARTITION BY ITEM ORDER BY VALUE ) STACKED_SUM
FROM #TEMP1

MSDN 참고
https://learn.microsoft.com/ko-kr/sql/t-sql/functions/lag-transact-sql?view=sql-server-ver16
LAG(Transact-SQL) - SQL Server
LAG(Transact-SQL)
learn.microsoft.com
'MSSQL' 카테고리의 다른 글
| [MSSQL] 임시테이블 생성 여부 확인 및 제거 (0) | 2024.06.03 |
|---|---|
| [MSSQL] 숫자를 지정한 자리수만큼 '0'을 채워 문자로 변경 (0) | 2023.12.20 |
| [MSSQL] Table의 Index 별 사용 횟수 확인 (0) | 2023.01.19 |
| [MSSQL] 트리거 이름으로 연결된 테이블 찾기 (0) | 2020.11.19 |
| [MSSQL] 문자열 내 TAB, 개행문자 지우기 (0) | 2020.09.23 |