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

Posted 程序员牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于LeetCode(数据库)- 指定日期的产品价格的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(数据库)- 每家商店的产品价格

LeetCode(数据库)- 每个产品在不同商店的价格

MySQL 练习<4>

MySQL 练习<4>

如何从最接近今天的时期获取不同日期时期不同价格的产品的默认价格?

2021-03-06Leetcode 1777.每家商店的产品价格