[SQL 문제 풀이] Product Price at a Given Date (지정된 날짜의 제품 가격)

Stupefyee's avatar
Jun 24, 2025
[SQL 문제 풀이] Product Price at a Given Date (지정된 날짜의 제품 가격)
notion image
처음에는 모든 제품의 가격이 10입니다. 2019-08-16일에 모든 제품의 가격을 찾기 위한 해결책을 작성하세요. 결과 테이블을 순서에 상관없이 반환하세요.
 

내가 작성한 쿼리

MySQL

-- 8월 16일 이전것들 추출하는 CTE WITH price_history AS ( SELECT * FROM Products WHERE change_date <= '2019-08-16' ), -- 각 id별 가장 마지막으로 변경된 날 추출하는 CTE latest_price AS ( SELECT product_id, MAX(change_date) AS latest_date FROM price_history GROUP BY product_id ) SELECT p.product_id, IFNULL(ph.new_price, 10) AS price FROM ( SELECT DISTINCT product_id FROM Products ) p LEFT JOIN latest_price lp -- id 기준으로 JOIN ON p.product_id = lp.product_id LEFT JOIN price_history ph -- id, 날짜 기준으로 JOIN ON p.product_id = ph.product_id AND lp.latest_date = ph.change_date ORDER BY p.product_id;

Oracle

-- 8월 16일 이전것들 추출하는 CTE WITH price_history AS ( SELECT * FROM Products WHERE change_date <= TO_DATE('2019-08-16', 'YYYY-MM-DD') ), -- 각 id별 가장 마지막으로 변경된 날 추출하는 CTE latest_price AS ( SELECT product_id, MAX(change_date) AS latest_date FROM price_history GROUP BY product_id ) SELECT p.product_id, NVL(ph.new_price, 10) AS price FROM ( SELECT DISTINCT product_id FROM Products ) p LEFT JOIN latest_price lp -- id 기준으로 JOIN ON p.product_id = lp.product_id LEFT JOIN price_history ph -- id, 날짜 기준으로 JOIN ON p.product_id = ph.product_id AND lp.latest_date = ph.change_date ORDER BY p.product_id;

차이점

항목
MySQL
Oracle
날짜 표시 방식 차이
'2019-08-16'
TO_DATE('2019-08-16', 'YYYY-MM-DD')
NULL 대체 함수
IFNULL(a, b)
NVL(a, b)
 
Share article

stupefyee