2016-03-30 160 views
1

我有一个表(“ibmqt”)与一些列,我想添加一个新的列,其中包含布尔值指示每行是否一列(“投标” )大于或等于另一列(“询问”)。添加一列基于其他列KDB +

我最成功的尝试,到目前为止是这样的:

ibmqt: update (pricecross:select bid>=ask from ibmqt) from ibmqt 

但是,这导致在以下:

time   sym bid ask bsize asize pricecross 
---------------------------------------------------- 
00:00:59.063 IBM 43.53 43.57 10000 9000 (,`ask)!,0b 
00:01:03.070 IBM 43.54 43.59 6500 3000 (,`ask)!,0b 
00:02:31.911 IBM 43.56 43.6 500 4500 (,`ask)!,0b 
00:03:43.070 IBM 43.56 43.56 10000 2500 (,`ask)!,1b 
00:06:01.170 IBM 43.54 43.56 8500 4500 (,`ask)!,0b 
00:06:11.081 IBM 43.56 43.58 500 1500 (,`ask)!,0b 
00:08:15.126 IBM 43.55 43.57 1500 9000 (,`ask)!,0b 

显然在 “pricecross” 专栏中,我只是想0,0,0 ,1,0等

有什么建议吗?

回答

4

不需要嵌套选择。这将你需要的东西:

ibmqt:update pricecross:bid>=ask from ibmqt 

或者你可以就地更新ibmqt

update pricecross:bid>=ask from `ibmqt 

q是一个数组的语言,因此bid>=ask比较两个配对,返回布尔值的列表。这说明了想法:

1 2 3 >= 0 2 4/110b 

布尔值的列表,然后分配到新列pricecross