1164. 指定日期的产品价格

发布时间 2023-05-25 09:19:15作者: 梦想是能睡八小时的猪

【题目】

产品数据表: Products

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

 

写一段 SQL来查找在 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    |
+------------+-------+

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/product-price-at-a-given-date
【思路】

找日期后修改的,赋值为10,日期前修改的找max日期即可。

【代码】

SELECT product_id,10 AS price
FROM Products
GROUP BY product_id
HAVING MIN(change_date)>'2019-08-16'
UNION
SELECT product_id, new_price AS 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
)