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 |
… | … | … | … | … | … |