gpt4 book ai didi

kdb - 根据条件更改表中特定行的值

转载 作者:行者123 更新时间:2023-12-01 10:23:24 25 4
gpt4 key购买 nike

假设我有下表。

    t:([]date:5#.z.D; ric:`A.HK`B.HK`C.HK`D.KS`E.T);

从这里开始,我想删除尾随字符串,包括“.”如果满足某些条件。

以下是我一直在做的方式 - 但我想知道是否会有更有效/更快的方式。

     newriclist: exec distinct ric from t;
dummy:{ (`ric`newric)!(x; `$ssr[string[x]; ".KS"; ""]) } each newriclist;
t lj `ric xkey dummy ...

或者,这是我理想中想要实现的,但似乎行不通。

    update ric:?[string[ric] like "*.KS"; `$ssr[string[ric]; ".KS"; ""]; ric] from `t;

最佳答案

使用上面的表格,您可以简单地执行以下操作:

q)update first each ` vs/:ric from `t where ric like "*.KS"
`t
q)t
date ric
---------------
2018.02.24 A.HK
2018.02.24 B.HK
2018.02.24 C.HK
2018.02.24 D
2018.02.24 E.T

对于一些解释,这使用了你可以做的事实

q)` vs `sym.suf
`sym`suf

无需字符串即可将您的符号分解为带点的组件。这需要应用每个权限 (/:) 以对受影响的列元素进行操作。这将返回一个列表的列表,因此 first each 负责将其变回一个简单的列表。此处的 where 条件负责确保它仅在正确的符号上运行。

作为一个快速扩展,如果你对一个有很多重复符号的大表执行此操作,请使用 .Q.fu将更有效地处理列表中的多个重复项:

update .Q.fu[{first each ` vs/:x};ric] from `t where ric like "*.KS"

关于kdb - 根据条件更改表中特定行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48962509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com