添加基于 kdb 中其他列值的过滤器
Add a filter based on other column values in kdb
我有一列包含 EURUSD、USDINR 等符号。我需要根据以下条件创建一个新列:如果货币对的前三个或后三个字母中的任何一个属于此列表
参考:("INR", "BLR".....)
然后我必须创建一个新列 "result",如果满足条件则将其更新为 "yes",否则 "No"。
谁能帮我解决这个问题。谢谢
给出
q)show t:([]pair:`EURUSD`USDINR`BLRUSD`INRBLR`BLREUR)
pair
------
EURUSD
USDINR
BLRUSD
INRBLR
BLREUR
和
q)ref:`USD`EUR
添加所述 "result" 列的直接查询是
q)update result:((`_'string pair)in\:ref)or(`#'string pair)in\:ref from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
但以下替代方案可能会更快:
q)update result:0<count each ref inter/:`[=13=] 3_/:string pair from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
给出相同的例子 table t
和参考文献 ref
来自 Alexanders 的例子你也可以建立一个匹配的开始和结束序列的列表:
q)show m:{raze(s,\:"*";"*",/:s:string(),x)}ref
"USD*"
"EUR*"
"*USD"
"*EUR"
然后找到匹配的对:
q)update max each pair like/:\:m from t
pair m
--------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
同时考虑构建列表 m
和 运行 查询的时间时,此示例的效率低于上面的示例。如果您只需要构建列表 m
那么这个示例可能更有效,但这将取决于列表的大小 ref
.
另一种选择。检查每对中的 ref 和结果列表中每对值的 OR
q)ref:`USD`EUR
q)update result:(|/')ref in/: `[=10=] 3_/: string pair from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
我有一列包含 EURUSD、USDINR 等符号。我需要根据以下条件创建一个新列:如果货币对的前三个或后三个字母中的任何一个属于此列表
参考:("INR", "BLR".....)
然后我必须创建一个新列 "result",如果满足条件则将其更新为 "yes",否则 "No"。
谁能帮我解决这个问题。谢谢
给出
q)show t:([]pair:`EURUSD`USDINR`BLRUSD`INRBLR`BLREUR)
pair
------
EURUSD
USDINR
BLRUSD
INRBLR
BLREUR
和
q)ref:`USD`EUR
添加所述 "result" 列的直接查询是
q)update result:((`_'string pair)in\:ref)or(`#'string pair)in\:ref from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
但以下替代方案可能会更快:
q)update result:0<count each ref inter/:`[=13=] 3_/:string pair from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
给出相同的例子 table t
和参考文献 ref
来自 Alexanders 的例子你也可以建立一个匹配的开始和结束序列的列表:
q)show m:{raze(s,\:"*";"*",/:s:string(),x)}ref
"USD*"
"EUR*"
"*USD"
"*EUR"
然后找到匹配的对:
q)update max each pair like/:\:m from t
pair m
--------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
同时考虑构建列表 m
和 运行 查询的时间时,此示例的效率低于上面的示例。如果您只需要构建列表 m
那么这个示例可能更有效,但这将取决于列表的大小 ref
.
另一种选择。检查每对中的 ref 和结果列表中每对值的 OR
q)ref:`USD`EUR
q)update result:(|/')ref in/: `[=10=] 3_/: string pair from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1