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