hive sql面试题:连续休假超过10天的员工

本文分享了一道关于Hive SQL的面试题目,内容涉及如何统计连续休假超过10天的员工。根据员工的休假开始日期(start_dt)和结束日期(end_dt),需要考虑多种连续休假情况,包括跨周末和连续多次请假。解决方案中提到,通过创建行号并减去休假日期来判断连续性,同时排除周六日。虽然代码未经测试,但该问题展示了对复杂逻辑的思考和Hive SQL的应用。
摘要由CSDN通过智能技术生成

之前遇到的一个面试题,跟大家分享一下。
对接公司人力资源部门,需要统计连续休假超过10天的员工。
表名:xiujia
字段名: user_id , start_dt , end_dt
员工id 休假开始日期 休假结束期

这里连续休假可能有以下几种情形:
(1) 从周一休息到下周五,去掉中间的周六日,一共休假10天。
(2)员工每次请假一天,连续请10次,一共休假10天。(这里包括连续请假N次的情形)
(3)员工从周一请假到周五,然后又从下周一请到下周五,两次请假一共10天。

针对这3种情况,我们可以发现,计算请假天数的时候,要排除周六日,并且,如果两次请假中间只隔了一个周六日,也算连续请假。

首先我们考虑连续的判断,假如我们把员工请假的日期都罗列出来,按照时间排序再加个行号,用休假日期减去行号,得到的那个日期,如果是相同的,那么就是连续的。如果遇到节假日,在算行号的时候要考虑节假日,然后计算连续休假天数的时候再把这个周六起给去掉。
这个面试题,有的人看了思路也可能会很蒙,不知道怎么实现,下面直接看代码:

select user_id,date_sub(dt_id,rn) as date_diff
from (
	select 
		aa.user_id,aa.dt_id,aa.is_weekend,aa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值