在kdb中多次加入
我有两张桌子 表1(订单)列:(日期、符号、数量) 表2(marketData)列:(日期、符号、收盘价) 我想将T+0到T+5的收盘价添加到表1中在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",
{[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
top5
列,其价格对应于date+0
todate+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
top5
列,其价格对应于date+0
todate+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”