문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-날짜58번
SELECT P.장비번호 , P.장비명 , P.최종상태코드 , A.상태코드 AS 직전상태코드 ,
A.변경일자 AS 직전변경일자 , A.변경순번 AS 직전변경순번
FROM 장비 P , 상태변경이력 A
WHERE P.장비구분코드 = 'A001'
AND A.장비번호 = P.장비번호
AND (A.변경일자 , A.변경순번) =
(SELECT 변경일자 , 변경순번
FROM (
SELECT 변경일자 , 변경순번
FROM 상태변경이력
WHERE 변경일자 < P.최종상태변경일자
AND 장비번호 = P.장비번호
ORDER BY 변경일자 DESC , 변경순번 DESC)
WHERE ROWNUM <= 1)
ORDER BY P.장비번호
🍎 정리
- 장비구분코드가 'A0001' 인 장비 데이터를 드라이빙 테이블로 놓고 장비번호로 상태변경이력 테이블과 조인하는데 조인하는 데이터의 변경일자가 장비 데이터의 최종 상태 변경 일자보다 작으면서 변경일자와 변경순번이 가장 최근인 1건만 가지고 오기 위해 다중 컬럼 비교를 통해 다시 상태변경이력을 조회하도록 한다.