SQL-每日一题【1164. 指定日期的产品价格】

题目

产品数据表: Products

写一段 SQL来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。

以 任意顺序 返回结果表。

查询结果格式如下例所示。

示例 1:

解题思路

1.题目要求我们查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。我们可以分成2部分来进行查询。

2.把第一次change_date在2019-08-16之后的单独分出来,这部分的price肯定是10,因为初始值是10。我们先将记录按照 product_id 进行分组,然后找出每一组中最小的 change_date 都小于2019-08-16的记录,它们的price就为10。

3.剩下的作为另外一部分, 另外一部分中,选出在2019-08-16之前最大的那天的price作为最终price。首先将记录按 product_id进行分组,然后找出每一组中最大的change_date <= 2019-08-16的记录,它们的price就为 new_price ,最后两部分做union即可。

代码实现

sql 复制代码
(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) as change_date
                                from Products
                                where change_date <= '2019-08-16'
                                group by product_id))

测试结果

相关推荐
2301_801074156 分钟前
TypeScript异常处理
前端·javascript·typescript
ᅠᅠᅠ@7 分钟前
异常枚举;
开发语言·javascript·ecmascript
caperxi9 分钟前
前端开发中的防抖与节流
前端·javascript·html
学习路上的小刘12 分钟前
vue h5 蓝牙连接 webBluetooth API
前端·javascript·vue.js
&白帝&12 分钟前
vue3常用的组件间通信
前端·javascript·vue.js
凌肖战13 分钟前
力扣上刷题之C语言实现(数组)
c语言·算法·leetcode
罗_三金33 分钟前
前端框架对比和选择?
javascript·前端框架·vue·react·angular
阿华的代码王国38 分钟前
MySQL ------- 索引(B树B+树)
数据库·mysql
秋夫人40 分钟前
B+树(B+TREE)索引
数据结构·算法
Hello.Reader1 小时前
StarRocks实时分析数据库的基础与应用
大数据·数据库