一年中有过三次连续请假大于两天的员工

 

问题

如下是某企业 2009 年内的员工请假记录表,员工每次请假的起始日期和结束日期都会记录在内。

imagepng

下表是员工的详细信息表:

imagepng

请找出这一年中有过连续 3 次请假大于 2 天的员工。

思路

大致思路:首先要将请假表中每一条记录的请假时间计算出来,然后利用序列的坐标平移,来寻找附近 3 条记录请假时间都大于 2 天的情况。

  1. 将请假表按员工分组,同时生成新序表,包括请假天数字段,将员工每次请假的天数都算出来并组成序列存放于字段中。

  2. 用 select 函数循环表进行筛选,找出天数字段中有过连续 3 次请假大于 2 天的记录。

  3. 使用雇员表,提取出前面选出的记录的员工姓名,以方便查看。

代码

A
1 =file("C:\\txt\\LeaveRecords.txt").import@t() 请假记录表
2 =file("C:\\txt\\Employees.txt").import@t() 雇员表
3 =A1.group(Employee;~.( interval(StartDate,EndDate)):Length) 将请假表按员工分组,算出每次请假的天数
4 =A3.select(Length.count(#>2 && ~>2 && Length(#-1)>2 && Length(#-2)>2)>0) 曾有连续 3 次请假超过 2 天的记录
5 =A2.keys(ID)
6 =A4.(A2.find(Employee)).(Name) 将员工序号换成姓名

结果

imagepng