找出连续 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 脚本》

问答搜集

https://stackoverflow.com/questions/64114629/how-to-loop-in-bigquery-for-four-consecutive-weeks-for-last-six-months-data