如何基于表中前一行设置meta id?求更优Q语言实现
Q语言分组ID生成:现有实现是否最优?
问题背景
已有按sym和time排序的表t,创建代码如下:
\S 123 t:`sym`time xasc ([]sym:100?10;time:100?100;price:100?10.0)
需求描述
为表中每行生成id字段,规则如下:
- 若当前行的
sym与前一行相同,且两行的time差值小于20秒,则复用前一行的id - 不满足上述条件时,
id在前一行基础上自增1
现有实现
我自己写的实现代码如下:
f:{[acc;elem] $[ (elem[`sym] ~ acc[`prevSym]) & 20 > elem[`time] - acc[`prevTime]; [ acc[`prevTime]:elem[`time]; acc ]; (`id`prevTime`prevSym)!(acc[`id]+1;elem[`time];elem[`sym]) ] } update id: (exec id from ((`id`prevTime`prevSym)!(0;0;())) f\ t) from t
之前多次请教Q语言问题时,都得到过简洁高效的优雅实现,想请教:当前方案是否为最优解?有没有更符合Q语言惯用写法的实现方式?
内容的提问来源于stack exchange,提问作者Chechy Levas
相关产品推荐
相关产品推荐

