首页 > 其他分享 >力扣2228-7天内两次购买的用户

力扣2228-7天内两次购买的用户

时间:2024-11-18 20:50:35浏览次数:3  
标签:purchase 2228 力扣 购买 2022 date 天内 id user

一、数据源

2228. 7 天内两次购买的用户

表: Purchases

+---------------+------+
| Column Name   | Type |
+---------------+------+
| purchase_id   | int  |
| user_id       | int  |
| purchase_date | date |
+---------------+------+
purchase_id 包含唯一值。
该表包含用户从某个零售商购买的日期的日志。

编写解决方案,获取 最多 间隔 7 天进行两次购买的用户的 id。

返回按 user_id 排序的结果表。

结果格式如下所示。

示例 1:

输入: 
Purchases 表:
+-------------+---------+---------------+
| purchase_id | user_id | purchase_date |
+-------------+---------+---------------+
| 4           | 2       | 2022-03-13    |
| 1           | 5       | 2022-02-11    |
| 3           | 7       | 2022-06-19    |
| 6           | 2       | 2022-03-20    |
| 5           | 7       | 2022-06-19    |
| 2           | 2       | 2022-06-08    |
+-------------+---------+---------------+
输出: 
+---------+
| user_id |
+---------+
| 2       |
| 7       |
+---------+
解释: 
用户 2 在 2022-03-13 和 2022-03-20 有两次购买。由于第二次购买是在第一次购买后的 7 天内,我们添加了他们的 ID。
用户 5 只购买了 1 次。
用户 7 在同一天有两次购买,所以我们添加了他们的 ID。

二、分析

我们要找到7天内多次购买的用户,所以要找到先找到每个人当前购买时间和下一次购买的时间,将其作为一个临时表,在临时表中,当一个人没有下次购买时间时,那么他的下次购买时间就为空,不符合题目要求,所以需要去除空值,然后使用datediff函数筛选出最多间隔7天进行两次购买的用户的 id。

三、代码

with t1 as (  -- 先找到每个人当前购买时间和下一次购买的时间
    select purchase_id, 
           user_id, 
           purchase_date,
           lead(purchase_date) over (partition by user_id order by purchase_date) ld
from purchases
order by purchase_id
)
select distinct user_id
from t1
where ld is not null  -- 当一个人没有下次购买时间时,那么他的ld就为空,也不符合题目要求,所以就去除空值
  and
datediff(ld,purchase_date)<=7    -- 使用datediff函数删选出最多间隔7天进行两次购买的用户的 id。
order by user_id;

四、总结

每次看到这种类型题时,就需要考虑本次、上次、下次的时间,然后再进行下一步操作。

标签:purchase,2228,力扣,购买,2022,date,天内,id,user
From: https://blog.csdn.net/dhdbanwan/article/details/143822269

相关文章

  • 力扣2308. 按性别排列表格
    一、数据2308.按性别排列表格表: Genders+-------------+---------+|ColumnName|Type|+-------------+---------+|user_id|int||gender|varchar|+-------------+---------+user_id是该表的主键(具有唯一值的列)。gender的值是'fem......
  • 力扣-2175、世界排名的变化
    一、数据来源2175、世界排名的变换表:TeamPoints+-------------+---------+|ColumnName|Type|+-------------+---------+|team_id|int||name|varchar||points|int|+-------------+---------+team_id包含唯一值。这张表......
  • leetcode 扫描线专题 06-leetcode.836 rectangle-overlap 力扣.836 矩形重叠
    题目矩形以列表[x1,y1,x2,y2]的形式表示,其中(x1,y1)为左下角的坐标,(x2,y2)是右上角的坐标。矩形的上下边平行于x轴,左右边平行于y轴。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形rec1和rec2。如果它......
  • leetcode 扫描线专题 06-leetcode.391 perfect-rectangle 力扣.391 完美矩形
    题目给你一个数组rectangles,其中rectangles[i]=[xi,yi,ai,bi]表示一个坐标轴平行的矩形。这个矩形的左下顶点是(xi,yi),右上顶点是(ai,bi)。如果所有矩形一起精确覆盖了某个矩形区域,则返回true;否则,返回false。示例1:输入:rectangles=[[1,1,3,3],[3,1,4,2],......
  • 力扣题目解析--括号生成
    题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8代码展示 classSolution{publi......
  • 102. 二叉树的层序遍历【 力扣(LeetCode) 】
    文章目录零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码零、原题链接102.二叉树的层序遍历一、题目描述给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。二、测试用例示例1:输入:root=[3,9,20,null,nul......
  • 力扣825.适龄的朋友,全网最详细解释
    好友请求的总数(LeetCode825)题目描述某社交平台规定,用户A可以向用户B发送好友请求需满足以下条件:用户A的年龄不小于用户B的年龄。用户B的年龄大于0.5*用户A的年龄+7。用户B的年龄小于等于用户A的年龄。此外,一个用户不能向自己发送好友请求。输入:......
  • 力扣.223 矩形面积 rectangle-area
    题目给你二维平面上两个由直线构成且边与坐标轴平行/垂直的矩形,请你计算并返回两个矩形覆盖的总面积。每个矩形由其左下顶点和右上顶点坐标表示:第一个矩形由其左下顶点(ax1,ay1)和右上顶点(ax2,ay2)定义。第二个矩形由其左下顶点(bx1,by1)和右上顶点(bx2,b......
  • 力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)
    解题思路:方法一:递归(左中右)classSolution{List<Integer>res=newArrayList<>();publicList<Integer>inorderTraversal(TreeNoderoot){recur(root);returnres;}publicvoidrecur(TreeNoderoot){if(......
  • leetcode 扫描线专题 06-leetcode.252 meeting room 力扣.252 会议室
    扫描线专题leetcode扫描线专题06-扫描线算法(SweepLineAlgorithm)leetcode扫描线专题06-leetcode.218the-skyline-problem力扣.218天际线问题leetcode扫描线专题06-leetcode.252meetingroom力扣.252会议室leetcode扫描线专题06-leetcode.253meetingroomii......