1164. 指定日期的产品价格

该SQL查询用于从Products表中检索2019-08-16的产品价格。首先,通过子查询找出在该日期前最后更新的产品_id,然后结合UNION ALL操作将这些产品的最新价格与未在该日期前更新过的价格(默认为10)合并。最终按product_id排序返回结果。
摘要由CSDN通过智能技术生成

SQL架构

产品数据表: 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    |
+------------+-------+
(
    (
select
product_id,new_price price
from
Products
where (product_id,change_date) in
(select
distinct product_id,max(change_date) over(partition by product_id )
from
Products
where
change_date <='2019-08-16'
)
)
union all
(
select
distinct product_id,10
from
Products
where product_id not in (select
distinct product_id
from
Products
where
change_date <='2019-08-16')
)
)
order by 
product_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值