考勤记录合并进出状态

博客讨论了如何处理门禁考勤记录,将进入和离开状态合并成时间段。提出了SQL处理的复杂性和可能存在的缺失数据问题,并推荐使用SPL区间分组方法来实现,详细解释了操作步骤和示例数据。
摘要由CSDN通过智能技术生成

【问题】

有门禁标
姓名   动作     时间
张三   进入   2015-05-13 9:00
张三  离开   2015-05-13 11:00
张三  进入   2015-05-13 12:00
张三  离开   2015-05-13 13:00
需要合并成 
姓名    进入时间          离开时间
张三  2015-05-13 9:00    2015-05-13 11:00
张三  2015-05-13 12:00   2015-05-13 13:00
有可能出现没有离开记录 或者没有进入记录的数据

【回答】

这类序运算用SQL不好写,这个问题要考虑有缺失数据就更麻烦,简单用序号去对应的结果是错的。可以用SPL区间分组的方法去实现,具体如下:

A
1 $select 姓名,动作,时间 from tb order by 姓名,时间
2 =a=0
3 =A1.group@o(姓名,a+=if(动作=="进入" || 动作[-1]=="离开",1,0))
4 =A3.new(姓名, (t=~.align(["进入","离开"],动作).(时间))(1):进入时间,t(2):离开时间)

A1:执行SQL取数,按姓名,时间排序

A3:按姓名分组,再按当前动作和上一动作值分组&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值