我有一个函数声明:
func:{[id;time] select last synp from synp_t where instr_id = id, tp_time < time}
Run Code Online (Sandbox Code Playgroud)
哪里instr_id有类型i和tp_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
Run Code Online (Sandbox Code Playgroud)
我想得到的是,例如,17.55 9.66.
如果我这样做select res:func_demo[id;time]from tab,也会弹出相同的错误,其中tab有两列instr_id和的表tp_time.
我想enlist可以解决问题,但我不确切知道如何使用它.我该如何解决这个问题?
这里的两个答案都很棒但是没有详细说明为什么会出现'length错误.错误完全取决于您的where条款where instr_id = id, tp_time < time.当您传递一个项目列表时,实际上创建了一个布尔列表列表,这些列表将被传递给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
Run Code Online (Sandbox Code Playgroud)
instr_id = id用原子运行你的第一个条件列表:
q)instr_id=2
10000b
q)instr_id=2 8
'length
[0] instr_id=2 8
^
Run Code Online (Sandbox Code Playgroud)
使用=仅适用于长度相等的列表的原子instr_id.如果您想传递多个项目以匹配,您可以改为使用in:
q)instr_id in 2
10000b
q)instr_id in 2 8
11000b
Run Code Online (Sandbox Code Playgroud)
对于第二个条件,tp_time < time再次要求传递相同长度的原子或列表:
q)tp_time<.z.t
11111b
q)tp_time<.z.t,.z.t
'length
[0] tp_time<.z.t,.z.t
^
Run Code Online (Sandbox Code Playgroud)
可以通过使用副词来解决这个问题,例如每个权利/:要比较tp_time多个项目并使用any将其缩减为单个列表:
q)tp_time</:.z.t,.z.t
11111b
11111b
q)any tp_time</:.z.t,.z.t
11111b
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助您了解您遇到上述问题的位置.
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |