真巧,昨天刚写了关于数据库连续问题的解决方案,没想到今天下午两点就有朋友在上海拼多多面试非技术岗位中就遇到了相似的问题。下面是原题:

一个最大连续支付失败的次数 有一张支付流水表pay;字段如下

id uid time status
pay_01 1 2024-01-15 10:00:00 fail
pay_02 1 2024-01-15 10:00:20 success

求每个用户的最大连续支付失败次数

输出字段:uid,cnt(失败次数)

如果我朋友看过我昨天写的数据库查找连续数据的文章,那么至少会有一些思路,而不是写的一塌糊涂了哈哈哈。

思路

就像我昨天写的一样,连续问题,创造一个连续列来和目标判断是否连续的列相比较是比较简单的一种办法。

比如题目中,需要时间连续的某人最大的支付失败数量,那么就需要按照时间排序了,那么如何判断时间连续,题目中并没有规定时间的出现频次,所以直接和时间来做比较判断连续并不是一个好的解决办法。

这里其实最简单的就是生成两次行号了。

步骤

1.按照用户编号开窗,按照时间排序,增加行号,这样就得到了每个用户按照时间排序的订单序号。

2.筛选掉支付订单成功的,再根据用户编号开窗,按照时间排序,增加行号,这样就得到了每个用户按照时间排序的失败的订单的序号。

3.两个序号相减,相等的数字则表示连续。

4.按照用户和得到的数字分组,或者最大的组,就是最大的连续支付失败的订单数量。

WITH ContinueCustomer AS(
SELECT p1.*, p1.rowNumber - RANK() over(PARTITION by p1.uid ORDER BY p1.time) as diff FROM (
SELECT *,RANK() over(PARTITION by uid ORDER BY time) as rowNumber FROM pay
) p1 WHERE p1.status = 'fail'
),
EveryContinueCustomerCounts AS(
SELECT uid,count(1) as times FROM ContinueCustomer GROUP BY uid,diff
)
SELECT uid,max(times) as cnt FROM EveryContinueCustomerCounts
总结

万变不离其宗,希望大家面试顺利。

SQL连续查询问题拓展—记上海拼多多非技术岗面试真题的更多相关文章

  1. 拼多多后台开发面试真题:如何用Redis统计独立用户访问量

    众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...

  2. 拼多多面试真题:如何用 Redis 统计独立用户访问量!

    阅读本文大概需要 2.8 分钟. 作者:沙茶敏碎碎念 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作 3 年的开发,稍微优秀一点的,都给到 30K 的 Offer. 当然,拼 ...

  3. 牛客SQL刷题第三趴——SQL大厂面试真题

    01 某音短视频 SQL156 各个视频的平均完播率 [描述]用户-视频互动表tb_user_video_log.(uid-用户ID, video_id-视频ID, start_time-开始观看时间 ...

  4. 2019 拼多多java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.拼多多等公司offer,岗位是Java后端开发,最终选择去了拼多多. 面试了很多家公司,感觉大部分公司考察的点都差 ...

  5. SQL Server查询时添加一列连续的自增列

    SQL Server查询时添加一列连续的自增列 在SQL Server数据库中表信息会用到Identity关键字来设置自增列.但是当有数据被删除的话,自增列就不连续了.如果想查询出这个表的信息,并添加 ...

  6. SQL 提高查询效率

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...

  7. SQL联合查询(内联、左联、右联、全联)的语法(转)

    最近在做一个比较复杂的业务,涉及的表较多,于是在网上找了一些sql联合查询的例子进行研究使用. 概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer j ...

  8. sql模糊查询

    SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: ...

  9. SQL提高查询效益之in、not in、between、like等条件讲述

    在使用SQL语句查询数据库记录时,如果要查询相同的内容,有着不同的多种方法. 仍然,尽管使用多种方法可以得到相同的结果,但是,如果您使用不同的方法,在执行效益上是截然不同的.因此,我们得仔细考虑,如果 ...

  10. SQL Server查询性能优化——堆表、碎片与索引(二)

    本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结.  第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...

随机推荐

  1. 搭建高可用k8s

    搭建k8s高可用 高可用只针对于api-server,需要用到nginx + keepalived,nginx提供4层负载,keepalived提供vip(虚拟IP) 系统采用openEuler 22 ...

  2. (数据科学学习手札161)高性能数据分析利器DuckDB在Python中的使用

    本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,经过六年多的 ...

  3. .net formwork WebApi 跨域问题

    背景: ASP.NET Formwork  Api / ASP.Net Core Api  做比较. 有关  Global.asax.FilterConfig.cs 和 RouteConfig.cs ...

  4. kettle从入门到精通 第二十六课 再谈 kettle Transformation executor

    1.前面文章有学习过Transformation executor ,但后来测试kettle性能的时候遇到了很大的问题,此步骤的处理性能太慢,导致内存溢出等问题.所以再次一起学习下此步骤的用法. 2. ...

  5. 时间戳,mysql 秒数,毫秒数与时间之间的相互转换

    时间戳,mysql 秒数,毫秒数与时间之间的相互转换 时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数.通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已 ...

  6. 查看es结构,es _search查询基础语法

    查看es结构,es _search查询基础语法 http://xx.xx.xx.xx:9200/ ES地址 car_info/_search POST {} POST { "query&qu ...

  7. 内网服务器通过单台外网服务器实现外网访问,iptables NAT

    环境: ​ servera: 外网服务器 ​ serverb: 内网服务器 servera内网网关(GATEWAY)要设置为外网IP,其IP地址作为其它内网服务器的网关 servera 内网网卡配置 ...

  8. linux下后台运行程序

    文章目录 背景 nohup命令 setsid命令 pm2 背景 后台运行程序的时候,如果退出当前的终端(session),你运行的所有程序(包括后台程序),都将被关闭. 原因是:你运行的程序都是你的终 ...

  9. 关于 KL 散度和变分推断的 ELBO

    01 KL 散度 Kullback-Leibler (KL) 散度,是一种描述 一个概率分布 \(P\) 相对于另一个概率分布 \(Q\) 的非对称性差异的概念. KL 散度是非负的:当且仅当两个分布 ...

  10. CLR via C# 笔记 -- 托管堆和垃圾回收(21)

    1. 访问一个资源所需的步骤 1). 调用IL指令newobj,为代表资源的类型分配内存(一般使用C# new 操作符来完成). 2). 初始化内存,设置资源的初始状态并使资源可用.类型的实例构造器负 ...