이력 테이블과 시점 조회: 유효 기간, 최신 상태, 특정 날짜의 상태, 기간 겹침
사원의 부서와 직급은 바뀌지만, 작년 매출은 "작년 당시의 부서" 로 집계해야 합니다. 행마다 유효 기간
[valid_from, valid_to)을 붙인 이력 테이블을 두면 현재 상태, 특정 날짜의 상태, 주문일 당시의 상태를 조건 하나로 뽑을 수 있습니다. 변경 처리와 기간 겹침·끊김 검사까지 정리합니다.
1. 왜 배우는가
사원 테이블에 부서 컬럼 하나만 두고 덮어쓰면 승진하는 순간 과거가 사라집니다. 지난해 3분기 매출을 부서별로 다시 뽑으면 그 주문을 받은 부서가 아니라 지금 부서로 묶여 숫자가 달라집니다. 가격, 계약 조건, 담당자, 등급처럼 시간에 따라 바뀌는 값은 대부분 같은 문제를 가집니다.
해법은 덮어쓰지 않고 행을 쌓는 것입니다. 각 행에 그 값이 유효했던 기간을 적으면 "이 날짜의 값" 을 조건으로 찾을 수 있습니다. 어려운 부분은 기간 경계입니다. 끝 날짜를 포함할지에 따라 조건, 겹침 검사, 변경 처리가 모두 달라지고, 잘못 정하면 경계일에 행이 두 개 나오거나 하나도 안 나옵니다.
이 레슨은 반개구간으로 이력을 설계하고, 현재·시점·시점 조인 쿼리를 쓰고, 이력 변경과 오염 검사를 다룹니다. 고급 01 순위 함수, 고급 03 LAG·LEAD, 고급 08 MERGE, 중급 07 날짜 함수를 알면 이해가 쉽습니다.