SQL面试问题帮忙解答

SQL问题:取出一个商家24小时内的交易里,同一个消费者连续失败三次及三次以上的数量。
商家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函数给每个消费者当前的交易状态新增两列下一个交易以及下下个交易的状态,然后三个交易状态都为失败即符合要求,三次以上包含三次,所以没必要算,然后去重计数。
1 回复 分享
发布于 2023-09-19 13:55 上海
一个思路不知道对不对:按邮箱分组,时间排序,提取lead(状态,1),lead(状态,2);如果三者状态均为失败则提取
1 回复 分享
发布于 2023-09-14 14:22 北京
1.我先把失败的晒出来 2.利用id-row_number()over()的差,与user_id进行分组,count(user_id)over(partition by user_id,id-row_number()over()的差)大于等于3,4.最后一聚合函数就行了。
点赞 回复 分享
发布于 2024-03-19 16:54 北京
分区对每个消费者创建两个排序辅助列(第一列正常按时间排序,第二列按状态 时间排),然后晒选出连续的失败
点赞 回复 分享
发布于 2023-09-17 15:52 新加坡
这个应该和连续签到一个意思吧
点赞 回复 分享
发布于 2023-09-14 14:25 江苏

相关推荐

存一下准备挨个投一下
小小:银行秋招真题,欢迎大家来刷:牛客 -> 题库 -> 国央企笔试真题 。https://www.nowcoder.com/exam/company?questionJobId=195&subTabName=written_page
点赞 评论 收藏
分享
08-29 17:17
已编辑
门头沟学院
嗨害嗨我来了:张总:你们这些年轻人,这不是把我的爱好暴露了吗?
工作时那些社死瞬间
点赞 评论 收藏
分享
在投简历的柠檬精很想...:可以明确说,问的东西几乎是简历上的东西。你写的确实有点模糊。面试可能会问你一些常用的通信的问题,差分信号走线之类的,单片机最小系统啥的,模电,数电,基本电源,buck,boost,ldo之类的吧。
点赞 评论 收藏
分享
评论
2
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务