MSSQL

[MSSQL] 이전 행 데이터 가져와 계산하기

csmkong 2023. 4. 11. 11:33

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