使用条件而不是q kdb中的列名选择带条件的查询

时间:2019-05-14 10:28:26

标签: kdb

我有一个表,其中的列符号为px,大小为px

t:([] sym:`GOOG`IBM`APPL; px:10 20 30; size:1000 2000 3000)

现在,如果我将sym列分配给变量ab

ab:`sym

然后,在查询下面运行时未提供正确的输出

select [ab],px from t where [ab]=`IBM / returns empty table
?[t;(=;`sym;`IBM);0b; [ab]`px![ab]`px]/ type

了解了herehere,但无法创建有效的查询。

1 个答案:

答案 0 :(得分:2)

上面的答案很接近,但是有一些事情要考虑。您正在运行的查询基本上是:

q)parse"select sym,px from t where sym=`IBM"
?
`t
,,(=;`sym;,`IBM)
0b
`sym`px!`sym`px

这里的关键是,通常表示需要征集一个术语。另外,对于列名的字典,您只需将值abpx连接起来。考虑到所有这些,我已经在上面修改了您的查询:

q)?[t;enlist(=;`sym;enlist`IBM);0b;(ab,`px)!ab,`px]
sym px
------
IBM 20

假设where子句也应引用ab

q)?[t;enlist(=;ab;enlist`IBM);0b;(ab,`px)!ab,`px]
sym px
------
IBM 20