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

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

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

解题思路: 反向推导, 正向执行

反向推导

  1. 获得连续2天及以上购物的用户及其对应的天数, 需要计算每位用户连续购买的天数, 再筛选出不小于2天的用户及其对应的天数
  2. 计算用户连续购买的天数, 需要定位出用户连续购买的日期, 在进行统计

正向执行

  1. 首先准备一个11月份每位用户以天为单位的购买记录, 并定位出连续购买的参照日期
  2. 计算每位用户连续购买的天数
  3. 筛选出连续2天及以上购物的用户及其对应的天数

一个关键点

  • 连续购买天数的计算, 考虑连续购买的前后日期差应当相等并且为1, 所以可以通过先对日期排序, 再用当日的日期减去排序号, 如果日期连续, 则得到的日期差相同(即开始连续购买的前一天日期), 以此为依据计算连续的天数
    select distinct 
           user_id,
           days
      from (
            select user_id,
                   count(*) over (partition by user_id, tp_dt) as days
              from (
                    select distinct 
                           sales_date,
                           user_id,
                           date_sub(sales_date, interval dense_rank() over (partition by user_id order by sales_date) day) as tp_dt
                      from sales_tb
                     where date_format(sales_date, "%Y%m") = "202111"
              ) as a
      ) as b 
     where days >= 2
  order by user_id
全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务