如何通过遍历多个列表来生成数据表? (KDB)

How to generate datatable by iterating through multiple lists? (KDB)

我有一个函数 quotes[ticker;startDate;endDate] 和一个函数 indexConstituents[index;startDate;endDate] 产生以下结果:

daterange: 2017.12.05,2017.12.06;

quotes'[AAPL;daterange]

date        time    sym    price
2017.12.05  09:45   AAPL   101.20
2017.12.06  09:45   AAPL   102.30

quotes'[GOOG;daterange]

date        time    sym    price
2017.12.05  10:00   GOOG   800.50

quotes'[BBRY;daterange]

date        time    sym    price
2017.12.06  11:15   BBRY   02.10

indexConstituents'[DJIA;daterange]

date        sym    shares   divisor
2017.12.05  AAPL   20       2
2017.12.05  GOOG   5        1
2017.12.06  AAPL   10       1.5
2017.12.06  BBRY   100      1

我需要一种方法 运行 indexConstituents 正常运行以在一组日期内生成成分列表(如上面的第二个 table),然后从 table 1 为每个成分 获取数据。最后,我需要加入来自两个 table 的数据以产生以下结果:

data:
date       time     sym    price    shares    divisor
2017.12.05 09:45    AAPL   101.20   20        2
2017.12.06 09:45    AAPL   101.30   10        1.5
2017.12.05 10:00    GOOG   800.50   5         1
2017.12.06 11:15    BBRY   02.10    200       1

前两个 table 的代码:

([] date:2017.12.05,2017.12.06; time:09:45,09:45; sym:`AAPL,`AAPL; price:101.20,102.30)

([] date:2017.12.05,2017.12.05,2017.12.06,2017.12.06; sym:`AAPL,`GOOG,`AAPL,`BBRY; shares:20f,5f,10f,100f; divisor:2f,1f,1.5f,1f)

我认为最好的方法是将 indexConstituents'[DJIA;daterange] 的结果 table 分配给一个变量,这样我们就可以取出 sym 列并应用 distinct 给它。

然后您可以使用该符号列表作为 quotes 的第一个参数。

最后将两个结果 table 连接在一起。

idx:indexConstituents'[DJIA;daterange];
q:quotes\:/:[distinct idx`sym;daterange];
q lj 2!idx

希望对您有所帮助!