SQL面试问题帮忙解答
SQL问题:取出一个商家24小时内的交易里,同一个消费者连续失败三次及三次以上的数量。
商家24小时内,是连续不断的收不同消费者的多笔交易,每笔交易有“成功”或者“失败”两种状态,交易信息里有“邮箱”来判断是否为同意同一消费者,每笔交易都有具体的交易时间精确到秒
#SQL面试#
商家24小时内,是连续不断的收不同消费者的多笔交易,每笔交易有“成功”或者“失败”两种状态,交易信息里有“邮箱”来判断是否为同意同一消费者,每笔交易都有具体的交易时间精确到秒
#SQL面试#
全部评论
select count(distinct `mail`)
from (
select `mail`, `交易状态`, lead(`交易状态`,1,0) over(partiton by `mail`)as `下一次交易状态`,lead(`交易状态`,2,0) over(partition by `mail`)as `下下一次交易状态`
from (
select `mail`, `交易状态`, row_number() over(partition by `mail` order by `交易时间`)
from t
)
where `交易状态` = '失败' and `下一次交易状态` = '失败' and `下下一次交易状态` = '失败'
group by `mail`
先给表按消费者分人排序,再用lead函数给每个消费者当前的交易状态新增两列下一个交易以及下下个交易的状态,然后三个交易状态都为失败即符合要求,三次以上包含三次,所以没必要算,然后去重计数。
一个思路不知道对不对:按邮箱分组,时间排序,提取lead(状态,1),lead(状态,2);如果三者状态均为失败则提取
1.我先把失败的晒出来 2.利用id-row_number()over()的差,与user_id进行分组,count(user_id)over(partition by user_id,id-row_number()over()的差)大于等于3,4.最后一聚合函数就行了。
分区对每个消费者创建两个排序辅助列(第一列正常按时间排序,第二列按状态 时间排),然后晒选出连续的失败
这个应该和连续签到一个意思吧
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享