大厂SQL面试题,连续时间问题

article/2025/10/2 20:51:03

今天分享一个非常常考,同时也不太容易的sql题目类型,求连续时间问题。

这类题的核心是:分组排序,用时间减去排序,如果连续的话他们的差会是相同值
记住下面的表,按照提供的三步思路理清楚里面的数据逻辑,连续时间问题再不会难到你

思路:
求解连续天数是面试时非常常考的问题,这类问题有非常巧妙的统一解法,分为3步:

1、为日期排序

  • row number() over (partition by use_id order by date) as rank

2、求日期和排序的差值(diff)

  • 因为日期存在周期,会存在跨月、跨年的情况,故使用datediff最保险
    date_diff(date, rank) as diff

3、求diff出现最多的次数

  • max(count(diff))

面试真题:

表1:audit_log
在这里插入图片描述
表2:staff_info
在这里插入图片描述
表3:category_dict
在这里插入图片描述
题目:
1)查询近一周分天各部门员工审核量、审核业务类型量、审核来源量,并按日期升序、审核量降序排列
2)查询近7天平均审核时长大于200s的部门中平均审核时长大于400的员工信息(审核时长=审核完成时间-开始审核时间)
3)查询各业务类型中,审核量Top3的员工姓名、员工部门,以及相应的审核通过占比
4)查询连续审核大于等于3天的员工信息:部门、姓名、id

-- 1)查询近一周分天各部门员工审核量、审核业务类型量、审核来源量,并按日期升序、审核量降序排列
select date(FROM_UNIXTIME(start_time)) 日期, 
audito_staf_id,
count(*) 员工审核量,  
count(distinct object_category) 审核业务类型量,  
count(distinct origin) 审核来源量from audit_log al
WHERE date(FROM_UNIXTIME(start_time)) > DATE_SUB(CURDATE(), INTERVAL 7 DAY)  
GROUP BY 日期, audito_staf_id
ORDER BY 日期, 审核来源量 desc;-- 2)查询近7天平均审核时长大于200s的部门中平均审核时长大于400的员工信息(审核时长=审核完成时间-开始审核时间)
select b.*
from
(select department_id
from audit_log al
join staff_info si on al.audito_staf_id = si.staff_id
WHERE date(FROM_UNIXTIME(start_time)) > DATE_SUB(CURDATE(), INTERVAL 7 DAY)  
GROUP BY department_id HAVING avg(timestampdiff(SECOND,FROM_UNIXTIME(start_time),FROM_UNIXTIME(create_time))) > 200) a
join 
(select department_id, si.staff_id, staff_name
from audit_log al
join staff_info si on al.audito_staf_id = si.staff_id
WHERE date(FROM_UNIXTIME(start_time)) > DATE_SUB(CURDATE(), INTERVAL 7 DAY)  
GROUP BY department_id, si.staff_id HAVING avg(timestampdiff(SECOND,FROM_UNIXTIME(start_time),FROM_UNIXTIME(create_time))) > 400 ) b on a.department_id = b.department_id-- 3)查询各业务类型中,审核量Top3的员工姓名、员工部门,以及相应的审核通过占比
select a1.*
from
(select a.*,
row_number() over (partition by object_category order by 员工审核量 desc) as rank_num
from
(select
object_category,
audito_staf_id,
staff_name,
department_id,
count(*) 员工审核量,  
-- sum(if(al.status = 1,1,0) ) 审核通过,
sum(if(al.status = 1,1,0) ) / count(*) 审核通过占比from audit_log al
join staff_info si on al.audito_staf_id = si.staff_id
GROUP BY object_category, audito_staf_id) a) a1
where rank_num >= 3;-- 4)查询连续审核大于等于3天的员工信息:部门、姓名、id
SELECT distinct department_name, staff_name, a3.audito_staf_id
from 
(select audito_staf_id, 
date_sub(date,  INTERVAL rank_num DAY) as gap,
count(1) as 连续审核天数
(select *,
row_number() over (partition by user_id order by 日期) as rank_num
from 
(select distinct audito_staf_id, date(FROM_UNIXTIME(start_time)) 日期
from audit_log ) a1
GROUP BY audito_staf_id) a2
GROUP BY audito_staf_id, gap ) a3
join staff_info si on a3.audito_staf_id = si.staff_id
WHERE 连续审核天数 >= 3;

http://chatgpt.dhexx.cn/article/3DCRIwrV.shtml

相关文章

经典Hive-SQL面试题及答案

目录 第一题 求分区累加值 第二题 UV和每个店铺访问量top3信息 Hive sql解答 第一题 求分区累加值 我们有如下的用户访问数据 userId visitDate visitCount u01 2017/1/21 5 u02 2017/1/23 6 u03 2017/1/22 8 u04 2017/1/20 3 u01 2017/1/23 6 u01 2017/2/21 8 U02 2017/1/…

吊打面试官之SQL面试题30问及答案

经典SQL30问一: 编写查询,查找表中的行总数。编写查询,消除表结果中的重复记录。编写查询,获取t_employee表中designation字段前3个字符。查询t_employee表,合并输出Designation和Department两个字段的内容。如果使用union和union all合并4条SQL子查询,union会有多少次被用来去…

pl sql面试题_PL SQL面试问答

pl sql面试题 If you have worked on Oracle database and going for an interview, you should go through PL SQL interview questions and answers. 如果您曾经在Oracle数据库上工作过并且要进行面试,则应该阅读PL SQL面试问题和答案。 PLSQL stands for Procedural Langu…

常见的sql面试题

本章是SQL面试题的汇总,之后还会不断更新,文章的思维导图如下: 1.SQL初级查询 单表查询 -- 查询学生表中有几名学生的信息.显示学号 select distinct 学号 from student;查询条件 -- 查询学生表中性别为女的学生所有信息 SELECT * FROM student WHERE 性别女;结果排序 -- …

美团/得物sql面试题

解题思路: 1.找出uid不同的但是买过pro_id相同的商品的用户 [自连接] selecta.uid,b.pro_id fromtb_order ajoin tb_order bon a.pro_id b.pro_id where a.uid <> b.uid -- 找出uid不同的但是pro_id相同的商品2.对uid和pro_id进行分组 selecta.uid,a.pro_id fromtb…

Spark SQL面试题

1.RDD DataFrame DataSet的区别 &#xff08;1&#xff09; 三者之间的关系 DataFrame是特殊的RDD(它相当于RDDschema&#xff0c;即RDD表信息)&#xff0c;可以将他看成数据库中的一张数据表&#xff0c;但是只知道这个"表"中的各个字段&#xff0c;不知道各个字段…

SQL常见面试题

SQL常见面试题关系型数据库&#xff08;SQL&#xff09;非关系型数据库&#xff08;NoSQL&#xff09;数据库三大范式主键与外键CHAR与VRCHAR数据类型临时表数据库函数、触发过程与存储器 SQL语句SQL语言分类DROP、TRUNCATE、DELETE的区别sum、count(\*)、count(1)、count(colu…

常见的SQL面试题:经典50例

SQL基础知识整理 select 查询结果&#xff0c;如: [学号,平均成绩&#xff1a;组函数avg(成绩)] from 从哪张表中查找数据&#xff0c;如:[涉及到成绩&#xff1a;成绩表score] where 查询条件&#xff0c;如:[b.课程号0003 and b.成绩>80] group by 分组&#xff0c;如:…

5个必考的大厂SQL面试题

学Python的同学&#xff0c;SQL也一定要学习&#xff0c;SQL几乎是每个数据岗的必备题目&#xff0c;下面分享几个常见的大厂SQL习题。 &#xff08;1&#xff09;找出连续7天登陆&#xff0c;连续30天登陆的用户&#xff08;小红书笔试&#xff0c;电信云面试&#xff09;&am…

7 大开源数据库利弊全对比

1、CUBRID CUBRID 是一个很好的免费开源选择&#xff0c;专门针对 Web 应用程序进行优化&#xff0c;当复杂的 Web 服务需要处理大量数据并生成巨大的并发请求时&#xff0c;CUBRID 非常有用。这个解决方案是用 C 写的。 优点&#xff1a; 多粒度锁定 在线备份 用于开发语言…

还在用Navicat?这款开源的数据库管理工具界面更炫酷!

数据库管理工具&#xff0c;是后端程序员使用频率非常高的的工具。Navicat、DataGrip虽然很好用&#xff0c;但都是收费的。最近在逛Github的时候&#xff0c;无意间发现了一款开源的数据库管理工具Beekeeper Studio&#xff0c;界面非常炫酷推荐给大家&#xff01; Beekeeper…

开源数据库管理系统现在比商业产品更受欢迎

原文链接&#xff1a;https://db-engines.com/en/blog_post/86 2021年1月13日 作者&#xff1a;马蒂亚斯盖尔曼&#xff08;Matthias Gelbmann&#xff09; Matthias Gelbmann是奥地利维也纳Solid IT联合创始人&#xff0c;董事总经理兼顾问。 Matthias Gelbmann在维也纳学习了…

你了解世界上功能最强大的开源数据库吗?

如果不是领导强制要求&#xff0c;可能根本不会留意到这款号称世界上功能最强大的开源数据库——PostgreSQL。如果你不读这篇文章&#xff0c;或许也会错过一个跃跃欲试想挤进前三的优秀数据库。 为了能够熟练运用&#xff0c;特意买书研究&#xff0c;发现这款数据库还真有点…

开源数据库列表

转载于&#xff1a;http://database.csdn.net/subject/databaseopen.htm 编辑导语 开源数据库最初的诞生和发展大都依靠自由软件开发者&#xff0c;但是&#xff0c;现在越来越多的IT公司开始把触角伸向了开源数据库。而早期投身于其中的IT厂商早已获利&#xff0c;比如Sleepy…

TuGraph 开源数据库体验

TuGraph 开源数据库体验 文章目录 TuGraph 开源数据库体验1. 简单介绍2. 可视化界面体验&#xff1a;查询界面&#xff1a;数据建模&#xff1a;数据导入&#xff1a; 3. 体验心得&#xff1a; 1. 简单介绍 TuGraph 是蚂蚁集团自主研发的大规模图计算系统&#xff0c;提供图数…

数据库与开源的未来

大家好&#xff0c;社区的小伙伴可能已经发现CnosDB已经全面拥抱Rust。我们一直高度关注行业趋势的发展&#xff0c;拥抱新兴的语言和前沿的技术。本期Jesse就想跟大家聊聊数据库与开源的未来。 本文仅代表个人观点&#xff0c;如有偏颇之处&#xff0c;还请海涵&#xff5e; …

做了7年开源数据库开发,我学到了什么?

作者 | PHILIP OTOOLE&#xff0c;已获作者授权 译者 | 弯月 责编 | 欧阳姝黎 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 2016年4月9日&#xff0c;第一版rqlite&#xff08;https://github.com/rqlite/rqlite/releases/tag/v1.0&#xff09;正式发布&a…

【数据库】什么是 PostgreSQL?开源数据库系统

文章目录 前言什么是 PostgreSQL&#xff1f;PostgreSQL 中的 SQL服务器管理接口 PostgreSQL 用途通用 OLTP&#xff1a;联合中心&#xff1a;地理空间&#xff1a;LAPP 堆栈&#xff1a; 使用 PostgreSQL 有什么好处&#xff1f;开源许可证&#xff1a;易于扩展&#xff1a;可…

这款免费开源的数据库工具,支持所有主流数据库!

Java技术栈 www.javastack.cn 关注阅读更多优质文章 DBeaver 是一个基于 Java 开发&#xff0c;免费开源的通用数据库管理和开发工具&#xff0c;使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。 由于 DBeaver 基于 Java 开发&#xff0c;可以运行在各种操作…

开源数据库管理系统DBeaver

简介 DBeaver dbeaver是免费和开源&#xff08;GPL&#xff09;为开发人员和数据库管理员通用数据库工具。 易用性是该项目的主要目标&#xff0c;是经过精心设计和开发的数据库管理工具。免费、跨平台、基于开源框架和允许各种扩展写作&#xff08;插件&#xff09;。 它支持任…