当前位置: 首页 > news >正文

【SQL】指定日期的产品价格

目录

题目

分析

代码


题目

产品数据表: 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    |
+------------+-------+

分析

编写一个解决方案,找出在 2019-08-16 时全部产品的价格。

关键点在找到 2019-08-16 前所有有改动的产品及其最新价格和没有修改过价格的产品

没有提供产品id列表,首先自行整理一份产品id列表,保证每个产品都考虑考虑到

(select distinct product_id from Products) a

需要找到2019-08-16 前所有有改动的产品

即针对一种产品,找到其在2019-08-16 前的最新价格,也就是最新日期的价格

select product_id,max(change_date) from Products

where change_date <= '2019-08-16'

group by product_id

将上述整理为新表b,左连接产品表a

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

)

) b

on a.product_id = b.product_id

还存在没有修改过价格的产品,所有产品在修改前的价格都是 10 。

通过ifnull,若为null,则价格为10,ifnull(b.new_price,10)

代码

select a.product_id, ifnull(b.new_price,10) price
from (select distinct product_id from Products) a
left join (select product_id,new_price from Productswhere (product_id,change_date) in (select product_id,max(change_date) from Productswhere change_date <= '2019-08-16'group by product_id)
) b
on a.product_id = b.product_id


文章转载自:

http://aRthM4Nq.kpgbz.cn
http://XnlD0kA2.kpgbz.cn
http://GKHjf6y8.kpgbz.cn
http://hPQYH7U0.kpgbz.cn
http://GKTT7NPb.kpgbz.cn
http://slKvqmXJ.kpgbz.cn
http://AaVlIrkT.kpgbz.cn
http://t8uIV3Ue.kpgbz.cn
http://YwJuNf4A.kpgbz.cn
http://lj56lFgG.kpgbz.cn
http://RGFfB5fO.kpgbz.cn
http://SyFVpk2T.kpgbz.cn
http://dVj6wVnp.kpgbz.cn
http://Z2qZyBur.kpgbz.cn
http://7BAw3eI6.kpgbz.cn
http://DB7yPWRb.kpgbz.cn
http://Jv35BMt4.kpgbz.cn
http://aC4QLs1l.kpgbz.cn
http://CVy4HZL1.kpgbz.cn
http://0ejCtHub.kpgbz.cn
http://2sWZ6GGA.kpgbz.cn
http://1VLRiyw5.kpgbz.cn
http://4bnYhS2u.kpgbz.cn
http://xVlpg0DD.kpgbz.cn
http://MYONrFTj.kpgbz.cn
http://lcB2GLDE.kpgbz.cn
http://vCetWj0r.kpgbz.cn
http://nx7nP4CA.kpgbz.cn
http://wvOlkDnB.kpgbz.cn
http://LkcqWB21.kpgbz.cn
http://www.dtcms.com/a/380993.html

相关文章:

  • 在WPF项目中使用阿里图标库iconfont
  • 新能源知识库(91)《新型储能规模化行动方案》精华摘引
  • 51c自动驾驶~合集29
  • Arbess V2.0.7版本发布,支持Docker/主机蓝绿部署任务,支持Gradle构建、Agent运行策略
  • 中科米堆CASAIM自动化三维检测系统-支持批量测量工件三维尺寸
  • 【学习K230-例程19】GT6700-TCP-Client
  • Java链表
  • 【PostgreSQL内核学习:表达式】
  • 步骤流程中日志记录方案(类aop)
  • React.memo 小练习题 + 参考答案
  • Java 的即时编译器(JIT)优化编译探测技术
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(4)
  • 综合体EMS微电网能效管理系统解决方案
  • ARM2.(汇编语言)
  • 从“插件化“到“智能化“:解密Semantic Kernel中Microsoft Graph的架构设计艺术
  • TDengine 特殊函数 MODE() 用户手册
  • 导购类电商平台的安全架构设计:防刷单与反作弊系统实现
  • 阿里云可观测 2025 年 8 月产品动态
  • 阿里云监控使用
  • 九识智能与北控北斗合作研发的L4级燃气超微量高精准泄漏检测无人车闪耀服贸会,守护城市安全
  • vulhub漏洞复现-redis-4-unacc (redis未授权访问)
  • 数据库分库分表是考虑ShardingSphere 还是Mycat?
  • CSP认证练习题目推荐 (3)
  • R geo 然后读取数据的时候 make.names(vnames, unique = TRUE): invalid multibyte string 9
  • Linux:线程封装
  • 电动指甲刀技术方案概述
  • 机器人巡检与巡逻的区别进行详细讲解和对比
  • 程序内存中堆(Heap)和栈(Stack)的区别
  • 提高软件可靠性的思路
  • (1-10-2)MyBatis 进阶篇