[Leetcode] Product Price at a Given Date
정답
SELECT
product_id, 10 AS price
FROM Products
GROUP BY product_id
HAVING MIN(change_date) > '2019-08-16'
UNION ALL
SELECT
product_id,
new_price as price
FROM Products
WHERE (product_id, change_date) IN (
SELECT
product_id,
MAX(change_date)
FROM Products
WHERE change_date <= '2019-08-16'
GROUP BY product_id
)
✅ Point
- 특정 날짜 (2019-08-16) 를 기준으로 갱신된 가격 가져오기
- 기준 날짜 이전에 가격이 갱신된 적이 없다면 -> 기본값 10 부여
- 기준 날짜 이전에 가격이 갱신된 내역이 있다면 -> 가장 최근의 가격 가져오기
- 기준 날짜 이전에 가격이 갱신된 적이 없는 경우
MIN(change_date)
으로 확인
- 기준 날짜 이후에 가격이 갱신된 적이 있는 경우
- 갱신 여부
change_date <= 2019-08-16
을 만족하면서MAX(change_date)
로 최신 갱신 날짜 가져오기- 해당 조건을 만족하는 (product_id, change_date) 가져와서 JOIN
- 갱신 여부
- 둘을 union하여 최종 결과 도출