Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

leet code sql 1164

leet code sql 1164

1164. Product Price at a Given Date

문제


  • 특정일을 기준으로 상품의 가격을 추정
  • 해당일 이전의 가격이 정해진 것이 없다면 10으로 설정

문제 접근


  • cte를 활용하여 구성하였다.
  • 기존 product 테이블에서 특정 일 이전 기준의 product 테이블을 left join시켜주어야 한다. ( 없는 경우)
  • 특정일 기준부터 id 별 최근 값을 추출하기 위해 row_number() over() 사용
  • 동일 테이블을 연결을 표현하기 위해 using 사용
  • case when null인 경우 if null로 표현
1
2
3
4
5
6
7
8
9
10
11
12
WITH t AS (
    SELECT
        product_id, new_price,
        rank() OVER(PARTITION BY product_id ORDER BY change_date DESC) rnk
    FROM Products
    WHERE change_date <= "2019-08-16"
)

SELECT p.product_id, IFNULL(t.new_price, 10) price
FROM Products p LEFT JOIN t USING(product_id)
WHERE t.rnk = 1 or t.rnk IS NULL
GROUP BY p.product_id