一年中有过三次连续请假大于两天的员工
问题
如下是某企业 2009 年内的员工请假记录表,员工每次请假的起始日期和结束日期都会记录在内。
下表是员工的详细信息表:
请找出这一年中有过连续 3 次请假大于 2 天的员工。
思路
大致思路:首先要将请假表中每一条记录的请假时间计算出来,然后利用序列的坐标平移,来寻找附近 3 条记录请假时间都大于 2 天的情况。
-
将请假表按员工分组,同时生成新序表,包括请假天数字段,将员工每次请假的天数都算出来并组成序列存放于字段中。
-
用 select 函数循环表进行筛选,找出天数字段中有过连续 3 次请假大于 2 天的记录。
-
使用雇员表,提取出前面选出的记录的员工姓名,以方便查看。
代码
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) | 将员工序号换成姓名 |
英文版
数据文件
Employees.txt
LeaveRecords.txt