🔑 한 줄 정의
LAG() = “현재 행 기준으로, 정렬 기준에 따라 이전 행의 값을 가져오는 함수”
❗ 중요한 포인트 (오해 방지)
❌ 그냥 “이전 데이터” 아님
✅ ORDER BY 기준으로 정해진 이전 행
🔎 기본 구조
LAG(컬럼, offset)
OVER (
PARTITION BY 기준
ORDER BY 정렬기준
)
1️⃣ 핵심 개념 3가지
✔ 1. “이전”은 ORDER BY로 결정됨
ORDER BY p_ymdt
👉 날짜 기준으로 이전
ORDER BY amount
👉 금액 기준으로 이전
👉 즉, 정렬 기준 바꾸면 결과 완전히 달라짐
✔ 2. PARTITION으로 그룹 나뉨
PARTITION BY customer_id
👉 고객별로 따로 계산
- 고객 A 안에서만 이전값
- 고객 B 안에서만 이전값
👉 다른 고객 데이터랑 섞이지 않음
✔ 3. “행 기준”이지 “데이터 의미” 아님
LAG는 그냥
“바로 위 행 값 주세요”
입니다.
👉 의미까지 이해하지는 않음
📊 예시로 이해
데이터
고객결제일
| A | 1월 |
| A | 3월 |
| A | 2월 |
쿼리
LAG(p_ymdt) OVER (
PARTITION BY customer_id
ORDER BY p_ymdt
)
정렬 후 내부 처리
고객결제일이전값
| A | 1월 | NULL |
| A | 2월 | 1월 |
| A | 3월 | 2월 |
👉 정렬 먼저 → 그 다음 이전값 계산
⚠️ 데이터 형태 상관없냐?
✔ YES
- 숫자
- 날짜
- 문자열
👉 전부 가능
❗ BUT 조건 있음
반드시 정렬 기준이 의미 있어야 함
❌ 잘못된 예
ORDER BY 없음
👉 아예 에러
ORDER BY 랜덤컬럼
👉 이전값 의미 없음 (쓰레기 결과)
🔥 실무에서 진짜 중요한 포인트
1️⃣ 정렬 기준이 핵심이다
- 날짜 → 시간 흐름
- 금액 → 크기 비교
- ID → 순서 의미 없음
2️⃣ NULL 처리 필수
첫 행은 무조건 NULL
COALESCE(LAG(...), 0)
3️⃣ 집계랑 같이 쓰면 강력
DATEDIFF(현재, LAG(이전))
👉 구매 주기 계산
🧠 한 줄 요약
LAG는 “이전 데이터”가 아니라
“정렬 기준에 따라 바로 앞 행의 값”을 가져오는 함수
반응형
'IT ▶ > Database' 카테고리의 다른 글
| [ADP/ADsP 자격] 빅데이터 정의 및 활용 (0) | 2020.05.18 |
|---|---|
| 데이터 분석 준전문가 (ADsP) ? (0) | 2020.05.02 |
| 데이터베이스 계층검색(START WITH), 실행 계획(Execution plan) 분석 (0) | 2020.03.11 |
| [Database Index] 데이터베이스 인덱스, 뷰, 시퀀스 개념과 역할 (0) | 2020.03.11 |
| [Database] 데이터베이스 테이블 컬럼 추가, 삭제, 변경 방법 (0) | 2020.03.09 |