Users
表:
+-------------+----------+ | 字段名 | 类型 | +-------------+----------+ | user_id | int | | item | varchar | | created_at | datetime | | amount | int | +-------------+----------+ 在这个表可能包含重复的记录。 每一行包括 user_id、购买的商品、购买日期和购买金额。
编写一个解决方案,找出活跃用户。活跃用户是指在其任何一次购买之后的 七天内 进行了第二次购买的用户。
例如,如果结束日期是 2023年5月31日,那么在 2023年5月31日 和 2023年6月7日之间(包括这两天)的任何日期都被视为"在7天内"。
返回 任意顺序 的 user_id
列表,表示活跃用户列表。
结果的格式如下示例:
示例 1:
输入: Users 表: +---------+-------------------+------------+--------+ | user_id | item | created_at | amount | +---------+-------------------+------------+--------+ | 5 | Smart Crock Pot | 2021-09-18 | 698882 | | 6 | Smart Lock | 2021-09-14 | 11487 | | 6 | Smart Thermostat | 2021-09-10 | 674762 | | 8 | Smart Light Strip | 2021-09-29 | 630773 | | 4 | Smart Cat Feeder | 2021-09-02 | 693545 | | 4 | Smart Bed | 2021-09-13 | 170249 | +---------+-------------------+------------+--------+ 输出: +---------+ | user_id | +---------+ | 6 | +---------+ 解释: – user_id 为 5 的用户只有一笔交易,因此他不是活跃用户。 – user_id 为 6 的用户有两笔交易,第一笔交易是在2021年9月10日,第二笔交易是在2021年9月14日。第一笔和第二笔交易之间的时间间隔小于等于7天。因此,他是一个活跃用户。 – user_id 为 8 的用户只有一笔交易,因此他不是活跃用户。 – user_id 为 4 的用户有两笔交易,第一笔交易是在2021年9月2日,第二笔交易是在2021年9月13日。第一笔和第二笔交易之间的时间间隔大于7天。因此,他不是活跃用户。============解答==========如下是三种答案===
# Write your MySQL query statement below with c as( select user_id ,created_at ,lag(created_at) OVER(PARTITION BY user_id ORDER BY created_at ) AS b_date from Users ), c1 as( select user_id, datediff(created_at,b_date) as das from c where b_date is not null ) select distinct user_id from c1 where das <=7 作者:张晓 链接:https://leetcode.cn/problems/find-active-users/solutions/2274955/lag-kai-chuang-by-zhang-xiao-esylmvqida-nq30/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 select distinct user_id from( select user_id, created_at, lead(created_at,1)over(partition by user_id order by created_at) as pn from Users ) as t where datediff(pn,created_at)<=7 作者:001 链接:https://leetcode.cn/problems/find-active-users/solutions/1/xiao-bai-jian-dan-zhi-bai-xie-fa-hen-ron-odpg/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 # Write your MySQL query statement below #手动造一个唯一标识 with ctr1 as ( select *, row_number() over() as id from users ) select distinct u1.user_id from ctr1 u1 join ctr1 u2 on u1.user_id = u2.user_id and ( u1.created_at between u2.created_at and DATE_ADD(u2.created_at, INTERVAL 7 DAY)) and u1.id <> u2.id 作者:Priceless TaussignhK 链接:https://leetcode.cn/problems/find-active-users/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。分析最后一种答案.
select *, row_number() over() as id from users Case 1 输入 Users = | user_id | item | created_at | amount | | ------- | ----------------- | ---------- | ------ | | 5 | Smart Crock Pot | 2021-09-18 | 698882 | | 6 | Smart Lock | 2021-09-14 | 11487 | | 6 | Smart Thermostat | 2021-09-10 | 674762 | | 8 | Smart Light Strip | 2021-09-29 | 630773 | | 4 | Smart Cat Feeder | 2021-09-02 | 693545 | | 4 | Smart Bed | 2021-09-13 | 170249 | 输出 | user_id | item | created_at | amount | id | | ------- | ----------------- | ---------- | ------ | -- | | 5 | Smart Crock Pot | 2021-09-18 | 698882 | 1 | | 6 | Smart Lock | 2021-09-14 | 11487 | 2 | | 6 | Smart Thermostat | 2021-09-10 | 674762 | 3 | | 8 | Smart Light Strip | 2021-09-29 | 630773 | 4 | | 4 | Smart Cat Feeder | 2021-09-02 | 693545 | 5 | | 4 | Smart Bed | 2021-09-13 | 170249 | 6 |
on u1.user_id = u2.user_id and ( u1.created_at between u2.created_at and DATE_ADD(u2.created_at, INTERVAL 7 DAY)) and u1.id <> u2.id
| user_id | item | created_at | amount | id | | user_id | item | created_at | amount | id | | ------- | ----------------- | ---------- | ------ | -- | | ------- | ----------------- | ---------- | ------ | -- | | 5 | Smart Crock Pot | 2021-09-18 | 698882 | 1 | | 5 | Smart Crock Pot | 2021-09-18 | 698882 | 1 | | 6 | Smart Lock | 2021-09-14 | 11487 | 2 | | 6 | Smart Lock | 2021-09-14 | 11487 | 2 | | 6 | Smart Thermostat | 2021-09-10 | 674762 | 3 | | 6 | Smart Thermostat | 2021-09-10 | 674762 | 3 | | 8 | Smart Light Strip | 2021-09-29 | 630773 | 4 | | 8 | Smart Light Strip | 2021-09-29 | 630773 | 4 | | 4 | Smart Cat Feeder | 2021-09-02 | 693545 | 5 | | 4 | Smart Cat Feeder | 2021-09-02 | 693545 | 5 | | 4 | Smart Bed | 2021-09-13 | 170249 | 6 | | 4 | Smart Bed | 2021-09-13 | 170249 | 6 |
标签:created,09,用户,活跃,2021,id,Smart,user From: https://www.cnblogs.com/mengbin0546/p/18375509