使用每行的上一个值计算 roll_rank

calculate roll_rank using prev value for each row

我有一个 table 我们需要设置和求和 roll_rank 除了 roll_rank 0,1,2 我们不需要触摸 0,1,2 中 roll_rank 的行 我们想按日期计算 roll_rank 的总和,其中不是 roll_rank in 0,1,2.

示例table:

tmp:([]date:`date$();name:`symbol$();roll_rank:`int$())
`tmp insert (2010.01.01;`sym1;1);
`tmp insert (2010.01.01;`sym2;2);
`tmp insert (2010.01.01;`sym3;0Ni);
`tmp insert (2010.01.01;`sym4;0Ni);
`tmp insert (2010.01.02;`sym1;0);
`tmp insert (2010.01.02;`sym2;1);
`tmp insert (2010.01.02;`sym3;2);
`tmp insert (2010.01.02;`sym4;0Ni);
`tmp insert (2010.01.02;`sym5;0Ni);
`tmp insert (2010.01.02;`sym6;0Ni);
`tmp insert (2010.01.03;`sym1;1);
`tmp insert (2010.01.03;`sym2;0Ni);
`tmp insert (2010.01.03;`sym3;0Ni);
`tmp insert (2010.01.03;`sym4;0Ni);

预期输出为

一种方法使用 vector conditional and over:

q){update{?[null x;1+prev x;x]}roll_rank from x}/[tmp]
date       name roll_rank
-------------------------
2010.01.01 sym1 1
2010.01.01 sym2 2
2010.01.01 sym3 3
2010.01.01 sym4 4
2010.01.02 sym1 0
2010.01.02 sym2 1
2010.01.02 sym3 2
2010.01.02 sym4 3
2010.01.02 sym5 4
2010.01.02 sym6 5
2010.01.03 sym1 1
2010.01.03 sym2 2
2010.01.03 sym3 3
2010.01.03 sym4 4

这也可能会达到您想要的结果:

update sums 1^deltas roll_rank by date from tmp