[LeetCode-SQL 50] 1164. Product Price at a Given Date

코린이·2025년 6월 8일

SQL 문제 풀이 (MySQL)

목록 보기
80/96

❓ 문제

Products
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| product_id    | int     |
| new_price     | int     |
| change_date   | date    |
+---------------+---------+

(product_id, change_date)는 이 테이블의 기본 키(고유 값을 가진 열의 조합)입니다.
이 테이블의 각 행은 특정 제품의 가격이 특정 날짜에 새 가격으로 변경되었음을 나타냅니다.

2019-08-16에 모든 제품의 가격을 구하는 솔루션을 작성합니다. 변경 전 모든 제품의 가격이 10이라고 가정합니다.

결과 테이블을 임의의 순서로 반환합니다.

자세한 문제 내용은 사이트 참고...


❗️ 문제 풀이

WITH TMP_TB AS (
    SELECT
        product_id, 
        change_date,
        new_price AS price,
        RANK() OVER(PARTITION BY product_id ORDER BY change_date DESC) AS RANKING
    FROM Products
    WHERE change_date <= '2019-08-16'
)
-- 2019-08-16 이후 데이터 + 2019-08-16 이전 데이터 기록X
SELECT
    product_id,
    10 AS price
FROM Products
WHERE product_id NOT IN (SELECT product_id FROM TMP_TB)
UNION
-- 2019-08-16 이전 + 가장 최근에 변경된 데이터
SELECT
    product_id,
    price
FROM TMP_TB
WHERE RANKING = 1
;

🔗 Reference

https://leetcode.com/problems/product-price-at-a-given-date/description/?envType=study-plan-v2&envId=top-sql-50

0개의 댓글