字节跳动面试SQL-用户登录区间合并

推荐阅读文章列表

大数据开发面经汇总【持续更新...】

我的大数据学习之路

大数据开发面试笔记V6.0

SQL题目

来自字节跳动数据研发二面

  • 有一张用户行为日志表ods_usr_log, 包含user_id(用户id)、start_time(登录时间)以及end_time(注销时间)
  • 问题:求出用户登录的所有最大时间段,比如用户1在10:00登录且11点注销,用户2在10:30登录且12:00注销,那么最大时间段就是 10:00到12:00

答案解析

模拟数据

insert into ods_usr_log(user_id, start_time, end_time) values 
(1, '09:01', '10:30'),
(2, '08:10', '09:08'),
(3, '10:20', '11:00'),
(4, '12:00', '13:00'),
(5, '11:30', '11:59')

思路分析

难点:如何对交叉区间进行合并

  1. 按照登录时间和注销时间进行排序
  2. 如果登陆时间小于上一条记录的注销时间,就表示有交叉,打上标签flag=1
  3. 当flag由0变为1的时候,就表示多了一个分组,因此我们可以对flag进行累加,累加后的值即为分组id

具体代码

select 
     group_id
     ,min(start_time) as start_time
     ,max(end_time)   as end_time
from (
         select 
              start_time
              ,end_time
              ,sum(flag) over (order by start_time, end_time) as group_id
         from (
               select 
                    start_time
                    ,end_time
                    ,case when start_time <= lst_end_time then 0 else 1 end as flag
               from (
                         select 
                              start_time
                              ,end_time
                              ,lag(end_time, 1, end_time) over (order by start_time asc, end_time asc) as lst_end_time
                         from ods_user_log
                    ) t
              ) t
     ) t
group by group_id
;
#数据人的面试交流地##校招过来人的经验分享#
全部评论
如果有一个用户的登陆时间很早,退出时间很晚,这个算法就很容易出问题吧
点赞 回复 分享
发布于 2024-07-24 16:28 上海
如果登陆时间小于上一条记录的注销时间,就表示有交叉,打上标签flag=1 这里写错了,打上flag=0
点赞 回复 分享
发布于 2024-07-28 22:00 四川

相关推荐

Aki-Tomoya:窝趣,人家这是先富带动后富,共同富裕了属于是
投递英伟达等公司10个岗位
点赞 评论 收藏
分享
MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
评论
9
26
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14102次浏览 183人参与
# 面试被问“你的缺点是什么?”怎么答 #
6438次浏览 100人参与
# 水滴春招 #
16545次浏览 350人参与
# 入职第四天,心情怎么样 #
11331次浏览 63人参与
# 租房找室友 #
8035次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26176次浏览 356人参与
# 职场新人生存指南 #
199273次浏览 5510人参与
# 参加完秋招的机械人,还参加春招吗? #
27018次浏览 276人参与
# 文科生还参加今年的春招吗 #
4118次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48634次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144723次浏览 829人参与
# 如果重来一次你还会读研吗 #
155720次浏览 1706人参与
# 机械人选offer,最看重什么? #
69078次浏览 449人参与
# 选择和努力,哪个更重要? #
44323次浏览 493人参与
# 如果再来一次,你还会学硬件吗 #
103650次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20526次浏览 414人参与
# 招聘要求与实际实习内容不符怎么办 #
46769次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901330次浏览 8961人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81380次浏览 496人参与
# 国企还是互联网,你怎么选? #
109200次浏览 853人参与
牛客网
牛客企业服务