在应该连续序号的序列中查找首个缺失项

例题描述和简单分析

某数据库中有表BOOK_CAPTER,数据如下所示:

BOOK_ID

CAPTER_INTERNAL_NUMBER

1

1

1

2

1

5

2

1

2

2

2

3

3

7

3

9

需要在每个BOOK_ID 组内,找出连续序号的序列(CAPTER_INTERNAL_NUMBER

)的首个缺失项,结果如下:

BOOK_ID

NUM

1

3

2

4

3

1

解法及简要说明

在集算器中编写脚本p1.dfx,如下所示: 


A

1

=connect("demo")

2

=A1.query@x("SELECT * FROM BOOK_CAPTER ORDER BY BOOK_ID,CAPTER_INTERNAL_NUMBER")

3

=create(BOOK_ID,NUM)

4

>A2.run(if(A3.select@1(ID==A2.ID),,if(ID!=ID[-1] && N!=1,A3.insert(0,A2.ID,1),if(ID==ID[-1] && N>N[-1]+1,A3.insert(0,A2.ID,N[-1]+1),if(ID!=ID[+1],A3.insert(0,A2.ID,N+1))))) )

简要说明:

A1   连接数据源名称为 demo 的数据库

A2  返回查询结果所组成的序表,结束时自动关闭数据库连接

A3  创建结果表,空序表(BOOK_ID,NUM)

A4  遍历 A2,若当前 ID 已经存在于结果表(A3)中,继续判断下一条记录,否则,若当前 ID 不等于上一条记录的 ID 并且当前 N 不为 1,A3 追加记录 [当前 ID,1],否则,若当前 ID 不等于上一条记录的 ID 并且当前 N 与上一条记录的 N 不连续, A3 追加记录 [当前 ID,上一条记录的 N+1],否则,若当前 ID 不等于下一条记录的 ID,A3 追加记录 [当前 ID,当前 N+1]。

JAVA 集成这段代码的方法可参考:Java 如何调用 SPL 脚本》

问答搜集

https://stackoverflow.com/questions/64144082/find-first-available-value-that-doesnt-exist