【LeetCode】1164. 指定日期的产品价格

产品数据表: Products

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| product_id    | int     |
| new_price     | int     |
| change_date   | date    |
+---------------+---------+
(product_id, change_date) 是此表的主键(具有唯一值的列组合)。
这张表的每一行分别记录了 某产品 在某个日期 更改后 的新价格。

编写一个解决方案,找出在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。

以 任意顺序 返回结果表。

结果格式如下例所示。

示例 1:

输入:
Products 表:
+------------+-----------+-------------+
| product_id | new_price | change_date |
+------------+-----------+-------------+
| 1          | 20        | 2019-08-14  |
| 2          | 50        | 2019-08-14  |
| 1          | 30        | 2019-08-15  |
| 1          | 35        | 2019-08-16  |
| 2          | 65        | 2019-08-17  |
| 3          | 20        | 2019-08-18  |
+------------+-----------+-------------+
输出:
+------------+-------+
| product_id | price |
+------------+-------+
| 2          | 50    |
| 1          | 35    |
| 3          | 10    |
+------------+-------+
with cte1 as(
  select distinct(product_id) from Products
),
cte2 as(
  select product_id,new_price,change_date,
  dense_rank() over(partition by product_id order by change_date desc) as rnk
  from Products
  where change_date<='2019-08-16'
),
cte3 as(
  select product_id,new_price,change_date
  from cte2
  where rnk=1
)

select cte1.product_id,ifnull(new_price,10) as price
from cte1
left join cte3
using(product_id)

你可能感兴趣的:(MySQL-刷题,leetcode,MySQL)