题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#

某宝店铺连续2天及以上购物的用户及其对应的天数

https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf

with t1 as -- 查询用户分别在哪天购买过产品(去重),并排序
         (
             select distinct user_id,
                             sales_date,
                             dense_rank() over (partition by user_id order by sales_date asc) 
                                as drk_date
             from sales_tb
         )
# 错误情况:直接查看排序第二(未考虑连续),但是案例依然能通过
# select user_id, max(drk_date) days_count from t1
# where drk_date >= 2
# group by user_id;

# 正确方案A:
select user_id,
# 分组辅助列,把连续的起始日期一致的分为一组,最终问题转化为:
# 同一个用户,在同一个连续起始日期,有多少天购买记录
#        date_sub(sales_date, interval drk_date-1 day) d1_group,
       count(*) days_count
from t1
group by user_id, date_sub(sales_date, interval drk_date-1 day)
having days_count >= 2
order by user_id;

# 方案B,效率不高,但是分步执行更清楚数据来源
# , d1_day_log as -- 查询用户每次连续期间的天数顺序(只购买一次的也保留)
#     (
#         select user_id,
#         # 辅助列,可不保留
#                date_sub(sales_date, INTERVAL drk_date - 1 day)
#                    as d1_date,
#         # 同一用户,同一起始日期d1_date的排序
#                dense_rank() over (partition by user_id, date_sub(sales_date, INTERVAL drk_date - 1 day) order by sales_date)
#                    as drk_d1_day
#         from user_buy_log
#     )

# select user_id,
#        max(drk_d1_day) days_count
# from d1_day_log
# group by user_id
# having days_count >= 2;

全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗? 那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
你找工作的时候用AI吗?
点赞 评论 收藏
分享
07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务