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(数据库)- 指定日期的产品价格的主要内容,如果未能解决你的问题,请参考以下文章