gpt4 book ai didi

kdb - 调用具有多个值的函数 kdb\q

转载 作者:行者123 更新时间:2023-12-01 06:12:46 26 4
gpt4 key购买 nike

我有一个函数声明:

func:{[id;time] select last synp from synp_t where instr_id = id, tp_time < time}

其中 instr_id 的类型为 itp_time 的类型为 v

例如,func[8;05:00:11] 工作正常并给我值 17.55

但是,如果我尝试 func[8 1;05:00:11 07:10:59],我会得到:

'length ERROR: incompatible lengths (different lengths of operands for synchronized operation or table columns lengths are not the same

我想得到的是,例如,17.55 9.66

如果我执行 select res:func_demo[id;time]from tab,也会弹出同样的错误,其中 tab 是包含两列 的表格instr_idtp_time

我想 enlist 可能会解决问题,但我不知道如何使用它。我该如何解决这个问题?

最佳答案

这里的两个答案都很好,但没有详细说明您为什么得到 'length。错误。错误全归咎于您的 where条款where instr_id = id, tp_time < time .当您传递一个项目列表时,您实际上创建了一个 bool 列表列表,这些列表将被传递给 where 子句。设置两个示例列表以突出显示这一点:

q)show instr_id:-5?10
2 8 0 1 6
q)show tp_time:5?.z.t
01:05:42.696 03:42:39.320 17:44:49.101 15:01:01.470 05:47:49.777

运行您的第一个条件 instr_id = id用原子列表:

q)instr_id=2
10000b
q)instr_id=2 8
'length
[0] instr_id=2 8
^

使用 =仅适用于长度等于 instr_id 的列表的原子.如果你想传递多个项目来匹配你可以改用 in :

q)instr_id in 2
10000b
q)instr_id in 2 8
11000b

对于第二个条件tp_time < time再次要求传递相同长度的原子或列表:

q)tp_time<.z.t
11111b
q)tp_time<.z.t,.z.t
'length
[0] tp_time<.z.t,.z.t
^

可以通过使用副词来解决这个问题,例如 each-right /:比较tp_time到多个项目并使用 any将其缩减为单个列表:

q)tp_time</:.z.t,.z.t
11111b
11111b
q)any tp_time</:.z.t,.z.t
11111b

希望这可以帮助您了解遇到上述问题的位置。

关于kdb - 调用具有多个值的函数 kdb\q,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51107241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com