题目链接:点击打开链接
题目大意:略。
解题思路:注意用表链接来避免条件查询去掉了部分不符合的数据(但题目又有默认值的数据)。
AC 代码
-- 解决方案(1)
SELECT t1.product_id, IFNULL(price, 10) price
FROM
(SELECT product_id FROM Products GROUP BY product_id) t1
LEFT JOIN
(SELECT * FROM (SELECT product_id, ROW_NUMBER() OVER(PARTITION BY product_id ORDER BY change_date DESC) rw, new_price price
FROM Products
WHERE change_date <= '2019-08-16') t2
WHERE rw = 1) t3
ON t1.product_id = t3.product_id
-- 解决方案(2)
select p1.product_id, ifnull(p2.new_price, 10) as price
from (
select distinct product_id
from products
) as p1 -- 所有的产品
left join (
select product_id, new_price
from products
where (product_id, change_date) in (
select product_id, max(change_date)
from products
where change_date <= '2019-08-16'
group by product_id
)
) as p2 -- 在 2019-08-16 之前有过修改的产品和最新的价格
on p1.product_id = p2.product_id