【Leetcode】高頻SQL基礎題–1164.指定日期的產品價格
要求:一開始,所有產品價格都為 10。編寫一個解決方案,找出在 2019-08-16 所有產品的價格。
以 任意順序 返回結果表。
解題思路:
找到 2019-08-16 前所有有改動的產品及其最新價格,如果沒有更新那就是原始價格。
1、子查詢:先找到所有的產品;
2、子查詢:再找到所有 2019-08-16 前有修改的產品和他們最新的價格;
3、使用 左連接left join 將兩個查詢聯合。使用ifnull(p2.new_price, 10)如果產品沒有價格,說明沒有修改過,設置為 10,如果有價格,設置為最新的價格。
代碼:
select p1.product_id, ifnull(p2.new_price, 10) as price
from (select distinct product_idfrom products
) as p1
left join (select product_id, new_price from productswhere (product_id, change_date) in (select product_id, max(change_date)from productswhere change_date <= '2019-08-16'group by product_id)
) as p2
on p1.product_id = p2.product_id