题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#
某宝店铺连续2天及以上购物的用户及其对应的天数
https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf
WITH t1 AS (
SELECT
user_id,
sales_date,
ROW_NUMBER() OVER (
PARTITION BY
user_id
ORDER BY
sales_date
) AS rk
FROM
sales_tb
),
t2 AS (
SELECT
user_id,
sales_date - rk AS date_sub
FROM
t1
)
SELECT
user_id,
days_count
FROM
(
SELECT
user_id,
date_sub,
COUNT(*) AS days_count
FROM
t2
GROUP BY
user_id,
date_sub
HAVING
COUNT(*) >= 2
) b
ORDER BY
user_id
非常典型的连续登录问题。先使用窗口函数得到每个用户登录时间排序的序号,再使用 登录日期-序号,如果存在连续登录的情况,则连续登录的这几天该差值是相同的。最后只需按照该差值分组聚合即可得到连续登录的天数。
另:如果存在连续登录之间有间隔的情况,可以再使用MAX()分组聚合一次,即可得到“最大连续登录天数”。
查看18道真题和解析