【问题标题】:KDB+ Apply Conditional and then Update Multiple Columns in TableKDB+ 应用条件然后更新表中的多个列
【发布时间】:2018-07-06 16:31:10
【问题描述】:

我有一个包含以下列名称的表:portfoliotradeTypecurrencysecuritytradeQuantitytradeMVtotalTradeMVtransferMVadjustedMV

我想通过adjustedMV 减少tradeQuantitytradeMVtotalTradeMVtransferMV

这是一个示例查询:

odTradesAdjusted:update tradeQuantity:tradeQuantity-0f^adjustedMV,tradeMV:tradeMV-0f^adjustedMV,totalTradeMV:totalTradeMV-0f^adjustedMV,transferMV:transferMV-0f^adjustedMV from odTradesAdjusted

但是,只有当 adjustedMV 小于其他列时,我才想这样做。我可以为每一列使用? 来做一个向量条件,但是有没有更优雅的方法来做这个而不是写出向量条件 4 次?

【问题讨论】:

    标签: functional-programming kdb


    【解决方案1】:

    你可以使用 apply (@) 加上一点减法逻辑:

    @[t;`tradeQuantity`tradeMV`totalTradeMV`transferMV;{x-y*0<x-y}[;t`adjustedMV]]
    

    编辑 - 这可以简化为

    @[t;`tradeQuantity`tradeMV`totalTradeMV`transferMV;{x-y*y<x}[;t`adjustedMV]]
    

    【讨论】:

    • 这很完美!非常感谢。你能解释一下减法逻辑是如何工作的吗?
    • x-y 在您希望进行减法时给出正数,而在您不想进行减法时给出负数。因此,使用0&lt; 将其转换为布尔值,然后将布尔值乘以y 以在不需要减法的地方给出零,并在需要减法的地方给出要减去的数字。然后只是减去。如果您使用两个简单的列表从右到左逐步运行它,则更容易看到它
    • 事实上,根据我上面的编辑,它可以进一步简化。而不是检查0&lt;x-y 可以检查y&lt;x
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2016-04-05
    相关资源
    最近更新 更多