找出连续 4 周每天均出勤达 7 小时的学生
例题描述和简单分析
有数据库表STUTEST,数据如下所示:
SID |
ATTDATE |
DURATION |
1 |
2019-11-10 |
8 |
2 |
2019-11-10 |
7 |
3 |
2019-11-10 |
8 |
1 |
2019-11-11 |
6 |
2 |
2019-11-11 |
7 |
3 |
2019-11-11 |
7 |
… |
… |
… |
需要找出连续4周每天均出勤达7小时的SID,结果如下:
1
2
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A |
|
1 |
=connect("bigquery") |
2 |
=A1.query@x("SELECT SID,ATTDATE,DURATION,null AS W FROM STUTEST WHERE DURATION>=7 ORDER BY SID,ATTDATE").run(W=pdate@w(ATTDATE)) |
3 |
=A2.group@o(SID;~.groups@o(W;count(~):CNT).select(CNT==7).group@i(W-W[-1]!=7).max(~.len()):weeks) |
4 |
=A3.select(weeks>=4).(SID) |
简要说明:
A1 连数据源为bigquery的数据库
A2 返回结果序表,自动关闭数据库连接
A3 按SID有序分组,组内找出连续出勤的最大周数(当周出勤满7天的才算数)
A4 找出连续出勤周数大于等于4的学生id
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。