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