본문 바로가기

SQL/LeetCode

LeetCode / 1164. Product Price at a Given Date / MySQL(Medium)

728x90

📚문제

출처 : LeetCode 1164(https://leetcode.com/problems/consecutive-numbers/?envType=study-plan-v2&envId=top-sql-50)


📝풀이

# Write your MySQL query statement below
WITH p1 AS (
    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))

SELECT * 
FROM p1

UNION
SELECT DISTINCT product_id
     , 10
FROM Products
WHERE product_id NOT IN (SELECT product_id FROM p1)

 

흠 간단하게 풀릴 줄 알았는데

생각보다 무지 어려웠다

UNION 해주어야 하는 것과

WHERE 절 서브쿼리를 사용해서 '2019-08-16' 기준으로 변화가 있는 id와 해당 id의 변경 최근날짜를 가져오는것까지는 

알고 있었는데 한 번 꼬이고 안 풀리니까 잘 안보였다

 

그래서 구글링 살짝 참고 ...

UNION 해주는 테이블에서 왜 값을 10으로 넣어주는걸까 잠깐 고민했는데

'2019-08-16' 이전 기준으로 가격이 변경된 적이 없는 ID 이므로 가격을 모두 10으로 통일해준 것이다

728x90