关于解决时间连续类问题的方法

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

https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf?tpId=268&tqId=2285906&ru=/exam/oj&qru=/ta/sql-factory-interview/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3DSQL%25E7%25AF%2587%26topicId%3D268

要解决这类问题,首要搞清楚

A.如何证明时间是连续的

B.如何把连续的时间抽出来

C.如何限制连续的时间是多久

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

·

A.如何证明时间是连续的

这个首先需要①排序

with a as(
select 
user_id,
sales_date,
ROW_number() over(PARTITION by user_id ORDER BY sales_date)'rn'#①排序
FROM
sales_tb)

其次,进行②作差

date_add(sales_date,INTERVAL,-rn day)

作差的原理如下: alt 当时间连续的时候,那么时间减去排序就会得到一个相同的值,同样,作差值相同就说明那段时间连续

·

B.如何把连续的时间抽出来

group by date_add(sales_date,INTERVAL,-rn day)

group by 作差的结果就是把作差相同的值抽出来进行分组,即把连续的时间抽出分组在一起

·

C.如何限制连续的时间是多久

`

这里是连续2天及以上


having count(*)>=2

`

完整代码如下

with a as(
select 
user_id,
sales_date,
row_number() over(partition by user_id order by sales_date) 'rn'#A①排序
from
sales_tb)

select 
user_id,
count(*)days_count
from a
group by  #B.如何把连续的时间抽出来
user_id,
date_add(sales_date,INTERVAL -rn day) #A②作差
having count(*)>=2 #C.如何限制连续的时间是多久

全部评论
很有用,兄弟我爱你
点赞 回复
分享
发布于 03-01 00:45 重庆

相关推荐

31 15 评论
分享
牛客网
牛客企业服务