0
点赞
收藏
分享

微信扫一扫

LeetCode(数据库)- 指定日期的产品价格


题目链接:​​点击打开链接​​

题目大意:略。

解题思路:注意用表链接来避免条件查询去掉了部分不符合的数据(但题目又有默认值的数据)。

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


举报

相关推荐

0 条评论