postgreySQL 库表按 date、company 排序如下,column3 部分值为 NULL。
date | company | column3 |
2004-01-01 | A | 5 |
2004-01-01 | B | NULL |
2004-01-01 | C | NULL |
2004-01-02 | A | NULL |
2004-01-02 | B | 7 |
2004-01-02 | C | NULL |
2004-01-03 | A | 6 |
2004-01-03 | B | 7 |
2004-01-03 | C | 9 |
2004-01-04 | A | NULL |
2004-01-04 | B | NULL |
2004-01-04 | C | NULL |
要求:对 company 相同的记录,从前往后处理每组数据,首先删除记录直到遇到第一个 column3 非 NULL 的记录;再把后续等于 NULL 的 column3 改为前面非 NULL 的值,直到遇到下一个非 NULL 的值,然后继续本过程。
date | company | column3 |
2004-01-01 | A | 5 |
2004-01-02 | A | 5 |
2004-01-02 | B | 7 |
2004-01-03 | A | 6 |
2004-01-03 | B | 7 |
2004-01-03 | C | 9 |
2004-01-04 | A | 6 |
2004-01-04 | B | 7 |
2004-01-04 | C | 9 |
编写SPL代码
1 | =post1.query("select * from tb order by company,date") |
2 | =A1.run(if( company==company[-1], column3=ifn(column3,column3[-1]))) |
3 | return A1.select(column3).sort(date) |
A1:通过JDBC查询数据库,按company、date排序。
A2:处理每条记录:同组记录时,如果本行的 column3 非 null 则不修改,为 null 则改为上一条。
A3:再选出 column3 非 null 的记录,按 date 排序,返回结果。
Java 集成 SPL 可参考 Java 如何调用 SPL 脚本