Functional programming KDB和x2B;应用条件,然后更新表中的多个列
我有一个列名如下的表格:Functional programming KDB和x2B;应用条件,然后更新表中的多个列,functional-programming,kdb,Functional Programming,Kdb,我有一个列名如下的表格:portfolio,tradeType,currency,security,tradeQuantity,tradeMV,totalTradeMV,transferMV,以及adjustedMV 我想通过adjustedMV减少tradeQuantity、tradeMV、totalTradeMV、transferMV列 以下是一个查询示例: odTradesAdjusted:update tradeQuantity:tradeQuantity-0f^adjustedMV,t
portfolio
,tradeType
,currency
,security
,tradeQuantity
,tradeMV
,totalTradeMV
,transferMV
,以及adjustedMV
我想通过adjustedMV
减少tradeQuantity
、tradeMV
、totalTradeMV
、transferMV
列
以下是一个查询示例:
odTradesAdjusted:update tradeQuantity:tradeQuantity-0f^adjustedMV,tradeMV:tradeMV-0f^adjustedMV,totalTradeMV:totalTradeMV-0f^adjustedMV,transferMV:transferMV-0f^adjustedMV from odTradesAdjusted
但是,我只想在adjustedMV
小于其他列时执行此操作。我可以使用?
为每一列创建一个向量条件,但是有没有比将向量条件写4次更优雅的方法呢?您可以使用apply(@
)和一点减法逻辑:
@[t;`tradeQuantity`tradeMV`totalTradeMV`transferMV;{x-y*0<x-y}[;t`adjustedMV]]
@[t;`tradeQuantity`tradeMV`totalTradeMV`transferMV;{x-y*0这很好!非常感谢。你能解释一下减法逻辑是如何工作的吗?x-y
在你想进行减法时给出正的,不想进行时给出负的。因此,使用0将其转换为布尔值。事实上,它可以根据我上面的编辑进一步简化。而不是选中0
@[t;`tradeQuantity`tradeMV`totalTradeMV`transferMV;{x-y*y<x}[;t`adjustedMV]]