【问题标题】:Pass multiple function parameter by column kdb q按列传递多个函数参数 kdb q
【发布时间】:2018-06-28 21:53:25
【问题描述】:

我最近在学习 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
...

有没有办法解决这个问题?非常感谢!

【问题讨论】:

    标签: kdb


    【解决方案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 可以用于我们想要完全匹配的情况

    【讨论】:

    • 再次嗨...我无法执行任何加入命令,因为 synp_test 日期已分区...这将关闭服务器 ..
    • 您好,请查看 wiki - code.kx.com/wiki/Reference/aj ;备注部分重点介绍了如何连接数据分区表。
    • 分区数据库:aj[symtime;select .. from trade where ..; select .. from quote where date = ..] 进一步限制不能使用的地方,或者列将被复制而不是映射到内存中(导致 aj 变慢)。
    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多