我最近正在学习kdb \ q。我有一个声明如下的函数:
func_demo:{[id;time] select last synp from synp_test where instrument_id = id, tp_time < time}
该功能运行完美。例如,func_demo[1;13:00:08]
将给我单行输出:
synp
----
7094.157
但是,我想将多行数据传递给该函数,该函数给了我多行结果。
例如,我的表t
如下所示:
id time
--------------
1 13:00:04
2 13:00:16
...
如果可能,我想传递整个id
列和time
列,我的预期结果将是:
id time synp
-------------------------
1 13:00:04 7094.157
2 13:00:08 8085.867
...
有没有办法解决这个问题?非常感谢!
答案 0 :(得分:1)
您可以使用aj
,如果时间不完全匹配,它将返回当前价格。
q)synp_test:update `g#id from `tp_time xasc ([] tp_time:13:00:04 13:00:08 13:00:12 ; id: 1 2 3 ;price:10 11 12) //
q)t1:([] id: 1 2; tp_time:13:00:04 13:00:09 )
aj[`id`tp_time;t1;synp_test]
id tp_time price
1 13:00:04 10
2 13:00:09 11
lj
可用于需要完全匹配的情况