6.3 普通分组:按序号分组

 

将记录分组,在每个分组中按序号计算。有一个记录日常考勤信息的表,如下图:

Per_Code in_out Date Time Type
1110263 1 2013-10-11 09:17:14 In
1110263 6 2013-10-11 11:37:00 Break
1110263 5 2013-10-11 11:38:21 Return
1110263 0 2013-10-11 11:43:21 NULL
1110263 6 2013-10-11 13:21:30 Break
1110263 5 2013-10-11 14:25:58 Return
1110263 2 2013-10-11 18:28:55 Out

每七条数据为一组,想要转换成如下结果:

Per_Code Date In Out Break Return
1110263 2013-10-11 9:17:14 18:28:55 11:37:00 11:38:21
1110263 2013-10-11 9:17:14 18:28:55 13:21:30 14:25:58

先创建目标数据结构,再把每七条记录整理成需要的结构填入数据,用 A()和 A.m() 多序号访问成员。

脚本:

A
1 =connect(“db”)
2 =A1.query@x(“select * from DailyTime order by Per_Code,Date,Time”)
3 =A2.group@o((#-1)\7)
4 =create(Per_Code,Date,In,Out,Break,Return)
5 =A3.(~([1,7,2,3,1,7,5,6]))
6 =A5.conj([~.Per_Code,~.Date]|~.(Time).m([1,2,3,4])|[~.Per_Code,~.Date]|~.(Time).m([5,6,7,8]))
7 >A4.record(A6)

A1 连接数据源
A2 查询数据,并按人员编号、日期和时间排序
A3 按人员编号和日期分组
A4 创建一个存放最后结果的空序表
A5 对每个组,使用 A([1,7,2,3,1,7,5,6]) 依次取出记录,这就是有序的全天记录。
A6 将每条记录的数据全部整理到一个序列中。其中用到了 A.m() 访问多个成员。
A7 将序列数据添加到 A4 创建的序表中。

运行结果:

Per_Code Date In Out Break Return
1110263 2013-10-11 09:17:14 18:28:55 11:37:00 11:38:21
1110263 2013-10-11 09:17:14 18:28:55 13:21:30 14:25:58