You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于表中前一行设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:06:08