题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#
某宝店铺连续2天及以上购物的用户及其对应的天数
http://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf
主要信息
- sales_tb(sales_date表示销售日期,user_id指用户编号)
- 求用户连续下单次数
问题拆解
总体思路
- 如何判断是否连续:是否连续例如1月10号、1月11号、1月12号、1月14号,行数分别为1、2、3、4,日期数-行数分别为1月9号、1月9号、1月9号、1月10号,可知道日期数-行数相同则为连续的天数
- 基于是否连续判断是否连续大于一定天数
具体实现
- 根据user_id分组并根据日期排序sales_date,对用户购买记录标记行号rn
- 使用每一行的日期时间减去该行的行号res,统计根据res值分组存在(group by having)连续连天以上的user_id
考点:ROW_NUMBER使用、DATE_ADD使用 GROUP BY WHERE HAVING语句使用,对连续天数判断也是个常见的考察技巧
SELECT
user_id,
COUNT(*) AS days_count
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY sales_date ASC) AS rn
FROM
sales_tb
WHERE
sales_num > 0
) t
GROUP BY user_id, DATE_ADD(sales_date, INTERVAL -rn DAY)
HAVING days_count >= 2
ORDER BY user_id;