5.3 数据无序,保持原序时计算某列与上一日期的差值

 

Sybase 数据库中有表 SAMPLE,数据如下所示:

SECURITY_ID DATE REP
2256 2020-01-01 0
2257 2020-01-02 1
2258 2020-01-03 2
2256 2020-01-02 3
2256 2020-01-03 5

需要在保持原表次序不变的情况下,计算相同 SECURITY_ID 下 REP 列与上一天的差值(DIFF),结果如下:

SECURITY_ID DATE REP DIFF
2256 2020-01-01 0 0
2257 2020-01-02 1 1
2258 2020-01-03 2 2
2256 2020-01-02 3 3
2256 2020-01-03 5 2

按原顺序,SECURITY_ID 相同时,求当前日期的 REP 与上一日 REP 的差值。
脚本:

A
1 =connect(“demo”)
2 =A1.query@x(“SELECT * FROM SAMPLE”).derive(null:DIFF)
3 >A2.group(SECURITY_ID).(~.run(DIFF=REP-REP[-1]))
4 return A2

A3 按 SECURITY_ID 分组后计算当前日期的 REP 与上一日 REP 的差值,分组后的子集是对原序表记录的引用,所以写入 DIFF 时,其实是往原序表的 DIFF 里写
A4 返回原序表,这样不会改变原序表的顺序