在kdb中多次加入

在kdb中多次加入,kdb,Kdb,我有两张桌子 表1(订单)列:(日期、符号、数量) 表2(marketData)列:(日期、符号、收盘价) 我想将T+0到T+5的收盘价添加到表1中 {[nday] value "temp0::update date",string[nday],":mdDates[DateInd+",string[nday],"] from orders"; value "temp::temp0 lj 2! select date",string[nday],":date,sym,close",

我有两张桌子

表1(订单)列:(日期、符号、数量) 表2(marketData)列:(日期、符号、收盘价)

我想将T+0到T+5的收盘价添加到表1中

{[nday]
    value "temp0::update date",string[nday],":mdDates[DateInd+",string[nday],"] from orders";
    value "temp::temp0 lj 2! select date",string[nday],":date,sym,close",string[nday],":close from marketData";  
    table1::temp   
} each (1+til 5)
我确信有更好的方法可以做到这一点,但当我尝试运行这个函数时,我会遇到一个“循环错误”。有什么建议吗?

有关常见错误,请参阅。循环错误是因为您正在使用
值设置视图,而不是全局视图。函数内部的
的计算结果就像它在函数外部一样,因此您不需要

也就是说还有很大的改进空间,这里有一些建议

在您的案例中根本不需要
值。例如,这一行:

第一行可以简化为(我假设,
mdDates
是一种函数,您可以直接从整数计算日期,而
DateInd
是一种全局函数):

在这一点上,看起来您正试图在列名中添加一些内容:

select date",string[nday],":date
请记住,表格是翻转字典。。。您可以通过键弄乱它们的列名,如下所示(非常复杂):

您还可以使用functional select,这在IMO中要整洁得多:

q)?[t;();0b;((`$"a","1"),`b)!(`a`b)]
a1 b
----
1  3
2  4
有关常见错误,请参阅。循环错误是因为您正在使用
值设置视图,而不是全局视图。函数内部的
的计算结果就像它在函数外部一样,因此您不需要

也就是说还有很大的改进空间,这里有一些建议

在您的案例中根本不需要
值。例如,这一行:

第一行可以简化为(我假设,
mdDates
是一种函数,您可以直接从整数计算日期,而
DateInd
是一种全局函数):

在这一点上,看起来您正试图在列名中添加一些内容:

select date",string[nday],":date
请记住,表格是翻转字典。。。您可以通过键弄乱它们的列名,如下所示(非常复杂):

您还可以使用functional select,这在IMO中要整洁得多:

q)?[t;();0b;((`$"a","1"),`b)!(`a`b)]
a1 b
----
1  3
2  4

似乎您希望有
p0
to
p5
列,其价格对应于
date+0
to
date+5
日期

使用副词
over
迭代
0
5
天:

q)orders:([] date:(2018.01.01+til 5); sym:5?`A`G; qty:5?10)
q)data:([] date:20#(2018.01.01+til 10); sym:raze 10#'`A`G; price:20?10+10.)

q)delete d from {c:`$"p",string[y]; (update d:date+y from x) lj 2!(`d`sym,c )xcol 0!data}/[ orders;0 1 2 3 4]
date       sym qty p0       p1       p2       p3       p4
---------------------------------------------------------------
2018.01.01 A   0   10.08094 6.027448 6.045174 18.11676 1.919615
2018.01.02 G   3   13.1917  8.515314 19.018   19.18736 6.64622
2018.01.03 A   2   6.045174 18.11676 1.919615 14.27323 2.255483
2018.01.04 A   7   18.11676 1.919615 14.27323 2.255483 2.352626
2018.01.05 G   0   19.18736 6.64622  11.16619 2.437314 4.698096

似乎您希望有
p0
to
p5
列,其价格对应于
date+0
to
date+5
日期

使用副词
over
迭代
0
5
天:

q)orders:([] date:(2018.01.01+til 5); sym:5?`A`G; qty:5?10)
q)data:([] date:20#(2018.01.01+til 10); sym:raze 10#'`A`G; price:20?10+10.)

q)delete d from {c:`$"p",string[y]; (update d:date+y from x) lj 2!(`d`sym,c )xcol 0!data}/[ orders;0 1 2 3 4]
date       sym qty p0       p1       p2       p3       p4
---------------------------------------------------------------
2018.01.01 A   0   10.08094 6.027448 6.045174 18.11676 1.919615
2018.01.02 G   3   13.1917  8.515314 19.018   19.18736 6.64622
2018.01.03 A   2   6.045174 18.11676 1.919615 14.27323 2.255483
2018.01.04 A   7   18.11676 1.919615 14.27323 2.255483 2.352626
2018.01.05 G   0   19.18736 6.64622  11.16619 2.437314 4.698096

什么是
mdDates
DateInd
什么是
mdDates
DateInd
您还可以使用parse函数帮助构建功能性选择查询
parse“从t中选择a1:a,b”
您还可以使用parse函数帮助构建功能性选择查询<代码>解析“从t中选择a1:a,b”