首页 > 数据库 >leecode 数据库: 1164. 指定日期的产品价格

leecode 数据库: 1164. 指定日期的产品价格

时间:2024-10-15 09:18:11浏览次数:3  
标签:1164 product 数据库 leecode 2019 08 date id change

表:

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 之前最新的更新价格,如果没有出现则默认价格为10。

代码如下:

select
p2.product_id,
ifnull(new_price,10) as price
from(
select
    *,
    rank() over(partition by product_id order by change_date desc) as rn
from Products
where change_date <= '2019-08-16') as p1
right join (select distinct product_id from products) as p2
on p2.product_id = p1.product_id
where rn is null or rn = 1;

一     从表中数据可知,产品3没用存在价格更改记录在规定时间前,但是我们又需要这个产品3,所以找一个包含所有产品的表。

select distinct product_id from products

 因为可能存在重复,需要去重。输出结果如下

输出

| product_id |
| ---------- |
| 1 |
| 2 |
| 3 |

二    然后再创建一个表按照要求找出时间在规定日期前的数据,并且增加一列排名对产品进行分组按照更改价格时间倒序排列。这样每个产品序列为1的就是截止到规定日期前该产品更新的最近价格。

select
    *,
    rank() over(partition by product_id order by change_date desc) as rn
from Products
where change_date <= '2019-08-16'

输出结果如下 

输出

| product_id | new_price | change_date | rn |
| ---------- | --------- | ----------- | -- |
| 1 | 35 | 2019-08-16 | 1 |
| 1 | 30 | 2019-08-15 | 2 |
| 1 | 20 | 2019-08-14 | 3 |
| 2 | 50 | 2019-08-14 | 1 |

三  以表一只有产品表的表为主表与表二进行连接,这样没有在出现在表二中的产品后面的数据为 NULL 方便后续的处理。

select
    *
from(
select
    *,
    rank() over(partition by product_id order by change_date desc) as rn
from Products
where change_date <= '2019-08-16') as p1
right join (select distinct product_id from products) as p2
on p2.product_id = p1.product_id;

输出结果如下

输出

| product_id | new_price | change_date | rn | product_id |
| ---------- | --------- | ----------- | ---- | ---------- |
| 1 | 20 | 2019-08-14 | 3 | 1 |
| 1 | 30 | 2019-08-15 | 2 | 1 |
| 1 | 35 | 2019-08-16 | 1 | 1 |
| 2 | 50 | 2019-08-14 | 1 | 2 |
| null | null | null | null | 3 |

四  根据输出以及题目要求进行数据的删选从而获得最终答案。

select
p2.product_id,
ifnull(new_price,10) as price
from(
select
    *,
    rank() over(partition by product_id order by change_date desc) as rn
from Products
where change_date <= '2019-08-16') as p1
right join (select distinct product_id from products) as p2
on p2.product_id = p1.product_id
where rn is null or rn = 1;

以上就是全部答案,如果对你有帮助请点个赞,谢谢。

来源:力扣(leecode

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 转载请注明出处:

leecode 数据库: 1164. 指定日期的产品价格-CSDN博客Products(product_id, change_date) 是此表的主键(具有唯一值的列组合)。这张表的每一行分别记录了 某产品 在某个日期 更改后 的新价格。https://blog.csdn.net/CYJ1844/article/details/142934664

标签:1164,product,数据库,leecode,2019,08,date,id,change
From: https://blog.csdn.net/CYJ1844/article/details/142934664

相关文章

  • 网站数据库为什么错误呢
    网站数据库出现错误可能有多种原因。为了更准确地定位问题并提供解决方案,请提供一些具体的信息,例如错误的具体表现、使用的数据库类型(如MySQL、PostgreSQL等)、错误日志或错误消息等。不过,我可以列出一些常见的数据库错误原因:连接问题:数据库服务器未启动。连接字符串或配......
  • 数据库系统——数学模型
    数学模型前言三级模式两种映射一、基本概念1.概念模型2.逻辑模型3.物理模型二、四个世界三、概念世界和概念模型1.E-R模型(实体-关系模型)2.EE-R模型3.面向对象模型(OO模型)4.谓词模型四、信息世界和逻辑模型关系模型五、计算机世界和物理模型前言三级模式内模式内......
  • leecode 数据库: 534. 游戏玩法分析 III
    表:Activity+--------------+---------+|ColumnName|Type|+--------------+---------+|player_id|int||device_id|int||event_date|date||games_played|int|+--------------+---------+(player_id,event_date)是此表的......
  • Scala连接数据库(mysql,redis)
    1、Scala连接mysql数据库:importjava.sql.{Connection,DriverManager,PreparedStatement,ResultSet}objectmysqlConn{defmain(args:Array[String]):Unit={Class.forName("com.mysql.jdbc.Driver")valconn:Connection=DriverManager.getCon......
  • ERP系统是什么?ERP系统如何与数据库对接?
    ERP系统的定义1.企业ERP系统标准的定义来自于其英文原意,即企业资源规划(EnterpriseResourcePlanning)。企业资源计划系统是一种集成的软件系统,旨在帮助企业管理其资源。它可以协调各种不同的业务流程,例如供应链管理、采购、库存管理、财务和人力资源。2.对企业资源进行有效共......
  • gaussdb 基础管理 数据库 表 用户 模式 权限 存储过程
    数据库database#创建数据库,指定字符集UTF8,缺省情况下新数据库将通过复制标准系统数据库template0来创建,且仅支持使用template0来创建。CREATEDATABASEdevdbENCODING'UTF8'template=template0;CREATEDATABASEtestdb;标识符的命名需要遵守如下规范:*标识符需要为......
  • 解决MaxKB数据库导入时的外键约束问题
    Hey,数据库小伙伴们!今天我们来聊聊在导入MaxKB数据库时,如何巧妙地绕过那些让人头疼的外键约束错误。别急,跟着我一步步来,保证你能够轻松搞定!问题来了:外键约束引发的导入错误在我们导入MaxKB数据库的数据时,可能会遇到因为外键约束而导致的导入错误。这通常是因为数据导入的顺......
  • 配置supermap iportal数据库,银河麒麟arm架构SP3系统中离线编译安装postgres、postgis
     一、安装环境准备postgresql-11.2.tar.gz、postgis-2.5.0.tar.gz文件,geos-3.6.1-12.ky10.aarch64.rpm包,再准备一台有外网的机器。如果遇到缺少的包,去有外网的机器下载,再考到内网机器里安装。大部分安装都是编译安装,遵循配置、编译、安装这三步。注意安装后的软件目录postgre......
  • Springboot基于java的学生宿舍管理系统ty263(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,公告信息,公寓信息,宿舍信息,宿舍分配,报修信息,报修进度,评分排名,晚归登记,宿舍评分开题报告内容一、课题背景及研究意义随着高校招生规模的扩大,学生数......
  • Springboot基于Java的信公OA办公系统b6c5g(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表员工,人事,财务,通知公告,阅读公告,文件信息,报销申请,通讯录,工资账套,工资信息,部门,职位开题报告内容一、研究背景和意义随着信息技术的迅猛发展和全球化的......