【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