首页 > 其他分享 >2292. 连续两年有 3 个及以上订单的产品

2292. 连续两年有 3 个及以上订单的产品

时间:2024-11-14 21:20:07浏览次数:3  
标签:purchase product 2292 id 订单 year date 两年 order

力扣题目跳转(. - 力扣(LeetCode)

表: Orders

+---------------+------+
| Column Name   | Type |
+---------------+------+
| order_id      | int  |
| product_id    | int  |
| quantity      | int  |
| purchase_date | date |
+---------------+------+
order_id 包含唯一值。
该表中的每一行都包含订单 ID、购买的产品 ID、数量和购买日期。

 题目要求:

编写解决方案,获取连续两年订购三次或三次以上的所有产品的 id。

以 任意顺序 返回结果表。

结果格式示例如下。

示例 1:

输入: 
Orders 表:
+----------+------------+----------+---------------+
| order_id | product_id | quantity | purchase_date |
+----------+------------+----------+---------------+
| 1        | 1          | 7        | 2020-03-16    |
| 2        | 1          | 4        | 2020-12-02    |
| 3        | 1          | 7        | 2020-05-10    |
| 4        | 1          | 6        | 2021-12-23    |
| 5        | 1          | 5        | 2021-05-21    |
| 6        | 1          | 6        | 2021-10-11    |
| 7        | 2          | 6        | 2022-10-11    |
+----------+------------+----------+---------------+
输出: 
+------------+
| product_id |
+------------+
| 1          |
+------------+
解释: 
产品 1 在 2020 年和 2021 年都分别订购了三次。由于连续两年订购了三次,所以我们将其包含在答案中。
产品 2 在 2022 年订购了一次。我们不把它包括在答案中。

case 1 的建表语句。

Create table If Not Exists Orders (order_id int, product_id int, quantity int, purchase_date date)
Truncate table Orders
insert into Orders (order_id, product_id, quantity, purchase_date) values ('1', '1', '7', '2020-03-16')
insert into Orders (order_id, product_id, quantity, purchase_date) values ('2', '1', '4', '2020-12-02')
insert into Orders (order_id, product_id, quantity, purchase_date) values ('3', '1', '7', '2020-05-10')
insert into Orders (order_id, product_id, quantity, purchase_date) values ('4', '1', '6', '2021-12-23')
insert into Orders (order_id, product_id, quantity, purchase_date) values ('5', '1', '5', '2021-05-21')
insert into Orders (order_id, product_id, quantity, purchase_date) values ('6', '1', '6', '2021-10-11')
insert into Orders (order_id, product_id, quantity, purchase_date) values ('7', '2', '6', '2022-10-11')

一     我们使用窗口函数,配合使用 range between 来计算当前行时间到一年后购买的次数 cnt1,以及当前行时间到二年后购买的次数 cnt2.

select *,
        count(order_id) over(partition by product_id order by purchase_date range between current row and interval '1' year following) as cnt1,
        count(order_id) over(partition by product_id order by purchase_date range between current row and interval '2' year following) as cnt2
from orders;

输出如下

二    那么我们只需要挑选 cnt1 >= 3, cnt2 - cnt1 >= 3的数据即可。

with tmp as

(select *,

        count(order_id) over(partition by product_id order by purchase_date range between current row and interval '1' year following) as cnt1,

        count(order_id) over(partition by product_id order by purchase_date range between current row and interval '2' year following) as cnt2

from orders)

select distinct product_id from tmp where cnt1 >= 3 and cnt2 - cnt1 >= 3;

输出如下

结果发现我这个不对啊,因为我这个是具体到连续两年一共 365 x 2 的天数,而题目只需要每年内次数大于等于3次然后年再连续即可。那么我们改变下思路即可。

我们只求每年的成交次数,并选出大于等于3次的。

select distinct product_id,year(purchase_date) as year
from orders
group by product_id,year
having count(*) >= 3

然后我们增加一列选取他的一下位为 t1.

with tmp as
(select distinct product_id,year(purchase_date) as year
from orders
group by product_id,year
having count(*) >= 3)
select *,lag(year) over(partition by product_id order by year) as t1 from tmp;

with tmp as
(select distinct product_id,year(purchase_date) as year
from orders
group by product_id,year
having count(*) >= 3),
tmp1 as
(select *,lag(year) over(partition by product_id order by year) as t1 from tmp)
select distinct product_id from tmp1 where year - t1 = 1;

很明显选出差值为1的即可。

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

来源:力扣(leecode

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

 转载请注明出处:

2292. 连续两年有 3 个及以上订单的产品-CSDN博客产品 1 在 2020 年和 2021 年都分别订购了三次。由于连续两年订购了三次,所以我们将其包含在答案中。我会尽快把力扣上的所有数据库题目发出来。商业转载请联系官方授权,非商业转载请注明出处。该表中的每一行都包含订单 ID、购买的产品 ID、数量和购买日期。编写解决方案,获取连续两年订购三次或三次以上的所有产品的 id。产品 2 在 2022 年订购了一次。我们不把它包括在答案中。order_id 包含唯一值。https://blog.csdn.net/CYJ1844/article/details/143780146

我会尽快把力扣上的所有数据库题目发出来。感兴趣的可以点个赞与关注。每天不定时跟新。

标签:purchase,product,2292,id,订单,year,date,两年,order
From: https://blog.csdn.net/CYJ1844/article/details/143780146

相关文章

  • 使用Python爬虫获取商品订单详情:从API到数据存储
    在电子商务日益发展的今天,获取商品订单详情成为了许多开发者和数据分析师的需求。无论是为了分析用户行为,还是为了优化库存管理,订单数据的获取都是至关重要的。本文将详细介绍如何使用Python编写爬虫,通过API获取商品订单详情,并将数据存储到本地。环境搭建在开始编写爬虫之前......
  • 获取购买到的商品订单详情API返回值说明
    在代购系统中,用户常常需要查看自己购买商品的订单详情,这对于提升用户体验和满意度至关重要。本文将详细介绍如何设计和实现一个获取订单详情API,并提供相应的代码示例。系统设计订单详情API需要提供关于特定订单的详尽信息,包括订单状态、商品信息、支付详情、物流信息等。这......
  • JAVA开源项目 基于Vue和SpringBoot洗衣店订单管理系统
    博主说明:本文项目编号T068,文末自助获取源码\color{red}{T068,文末自助获......
  • [lnsyoj1521/luoguP2292] 打鼹鼠
    题意给定\(n\)个点\((x_i,y_i)\)和对应时间\(time_i\),求从任意点开始,每单位时间静止或四向移动,在\(time_i\)时停留的点数的最大值,保证\(time_i\)顺序输入sol线性dp记\(f_i\)表示停留在第\(i\)个点时,点数的最大值,则转移方程为\[f_i=\max_{j=1}^if_j+1(dist_{i,......
  • 一种增稳加速直连 Github Steam Pixiv 等网站的全新轻量化方案 (Sheas Cealer 开发两
    由于法律风险和敏感性,本文不探讨使用代理或者混淆作为解决方案,而是研究一种更加合法合规和轻量化的无代理直连方案来加速部分网站的访问,在结尾处我编写了一个简单易用的开源桌面端程序,运用本文介绍的原理来实现部分网站的加速,如果你对原理部分不感兴趣,也可以直接跳至结尾处看我写......
  • 使用 Python 流式 Websocket 传输 Binance 订单更新 附代码
    对于从事加密货币行业的任何人来说,使用RESTapi从交易所查询实时数据并不总是最佳做法,原因有很多效率低下:每个查询都需要时间,并且会显着影响性能,尤其是对于高频策略。交易所施加的限制很容易被打破,例如Binance的硬限制为每分钟1200个请求权重您只能检索有限数量的历史数......
  • 订单日记助力“实峰科技”提升业务效率
    感谢北京实峰科技有限公司选择使用订单日记!北京实峰科技有限公司,成立于2022年,位于北京市石景区,是一家以从事生产、销售微特电机、输配电及控制设备等业务为主的企业。在业务不断壮大的过程中,想使用一种既能提升运营效率又能节省成本的系统管理工具,在市场上多方比较和考察......
  • 苍穹外卖 商家取消、派送、完成订单
        OrderController//取消订单//取消订单逻辑://1.商家需要将订单状态修改为“已取消”//2.商家取消订单时需要指定取消原因//3.商家取消订单时,若用户已经完成了支付,那么需要为用户退款/***取消订单**@paramorder......
  • 管家婆财贸ERP BB025.组装拆分选销售订单
    最低适用版本:财贸系列22.0插件简要功能说明:组装拆分单增加选单,选销售订单更多细节描述见下方详细文档插件操作视频:进销存类定制插件--组装拆分选销售订单插件详细功能文档:1.组装与拆分单增加应用按钮【选择销售订单明细】a.用户可以在组装与拆分单编辑状......
  • 热烈欢迎“乾耀科技”选择使用订单日记
    感谢深圳乾耀科技有限公司选择使用订单日记!深圳乾耀科技有限公司,成立于2023年,位于深圳市龙岗区,是一家以从事销售五金产品为主的企业。在业务不断壮大的过程中,想使用一种既能提升运营效率又能节省成本的系统管理工具,在市场上多方比较和考察后最终选择了订单日记。订单日......