郑州网站建设开发公司,江西赣州人才网最新招聘信息,程序员做外包网站,全球域名查询题目描述
leetcode题目#xff1a;指定日期的产品价格
思路
找出所有的产品的指定的日期的价格#xff1b;若找不到某个产品的更改日期#xff0c;则将该产品价格设置为10。
关键点#xff1a;
if没有16号的#xff0c;怎么找到前一个日期的#xff1f; 日期小…题目描述
leetcode题目指定日期的产品价格
思路
找出所有的产品的指定的日期的价格若找不到某个产品的更改日期则将该产品价格设置为10。
关键点
if没有16号的怎么找到前一个日期的 日期小于16号(条件1)的最大日期(条件2)。如果没有对应日期的则设置为10 IFNULL()函数
细节详见【官方题解】
select distinct A.product_id, IFNULL(B.new_price, 10) as price
from Products A
left join (select product_id, new_pricefrom Productswhere (product_id, change_date) in (select product_id, max(change_date)from Productswhere change_date 2019-08-16group by product_id)) B
on A.product_id B.product_id记录自己写的错误点
-- select product_id, new_price, max(change_date)
-- from Products
-- where change_date 2019-08-16
-- group by product_id
--
-- | product_id | new_price | max(change_date) |
-- | ---------- | --------- | ---------------- |
-- | 1 | 20 | 2019-08-16 |
-- | 2 | 50 | 2019-08-14 |
--
-- ERROR: 其中new_price为20 错误是因为主键是 product_id 和 change_date而不是主键是product_id
-- 所以要通过(product_id, change_date) 定位到对应的new_price, 再加一层嵌套。