如何在kdb + / q中从带有列表的表中选择列的子集?

时间:2019-09-03 21:46:45

标签: kdb

给出下表:

time     | col1  col2  col3  ...
--------------------------------
10:53:02 | 89    89    76    ...
...

如何从列名(即cols:('col1';'col3');)列表引用的表中选择列的子集(包括索引) 从而预期结果将是:

time     | col1  col3
----------------------
10:53:02 | 89    89   
...

谢谢

2 个答案:

答案 0 :(得分:4)

您可以在每个右(/ :)副词中使用take(#)关键字。 因此,q将从表t中获取sym和price列的子集,并返回一个包含您的密钥和所需数据子集的表

q)t:([time:.z.z+ 1 2];sym:`a`b;price:10 20;vol:30 40)
q)c:`sym`price
q)c#/:t
time                   | sym price
-----------------------| ---------
2019.09.05T07:56:36.069| a   10
2019.09.06T07:56:36.069| b   20

答案 1 :(得分:3)

有两种方法可以做到这一点:

q) t:([time:.z.z+ 1 2];sym:`a`b;price:10 20;vol:30 40)

输出所需的列:

q) c:`sym`price  

将表键列添加到上面的列表中:

q) c:keys[t],c

使用功能选择:

q) keys[t] xkey ?[`t;();0b;c!c]

使用Take(#)运算符

q) keys[t] xkey c#0!t

输出:

time                   | sym price
-----------------------| ---------
2019.09.04T23:05:21.577| a   10
2019.09.05T23:05:21.577| b   20