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]]