Kdb 如何从update语句中的字典中查找?

Kdb 如何从update语句中的字典中查找?,kdb,Kdb,我有一个表't'和一个字典'lookup': t:([] date:2018.01.01 + til 5; a:`a`b`c`d`e) lookup:((2018.01.01 + til 5),'`a`b`c`d`e)!(1000*til 5) 因此,查找将日期和符号列表作为键,例如: lookup[(2018.01.03;`c)] /returns 2000j 如果我想在update语句中使用字典,通常可以: update b:lookup[(2018.01.03;`c)] from t

我有一个表't'和一个字典'lookup':

t:([] date:2018.01.01 + til 5; a:`a`b`c`d`e)

lookup:((2018.01.01 + til 5),'`a`b`c`d`e)!(1000*til 5)
因此,查找将日期和符号列表作为键,例如:

lookup[(2018.01.03;`c)] /returns 2000j
如果我想在update语句中使用字典,通常可以:

update b:lookup[(2018.01.03;`c)] from t
update b:lookup[(last date;last a)] from t
但是,我不能将它用于imho最明显的用例:查找特定的行值。这里直观地说是最简单的,但会返回一个错误(“error:'length”):

也考虑过使用索引,但这也不起作用:

update b:lookup[(date[i];a[i])] from t
已经多次遇到问题模式,如果有一个直接的解决方案就好了

谢谢。

我想应该是

update b:lookup[flip (date;a)] from t
flip
将2个列向量转换为单个列表,然后可用于查找:

flip (t`date;t`a)
((2018.01.01;`a);(2018.01.02;`b);(2018.01.03;`c);(2018.01.04;`d);(2018.01.05;`e))
或者,您可以使用键控表格,只需使用键控表格
lj
表格
t
,然后使用
lookup2
键控表格:

lookup2:( [date:(2018.01.01 + til 5); a:`a`b`c`d`e] b:1000*til 5)
t lj lookup2
它认为应该是这样

update b:lookup[flip (date;a)] from t
flip
将2个列向量转换为单个列表,然后可用于查找:

flip (t`date;t`a)
((2018.01.01;`a);(2018.01.02;`b);(2018.01.03;`c);(2018.01.04;`d);(2018.01.05;`e))
或者,您可以使用键控表格,只需使用键控表格
lj
表格
t
,然后使用
lookup2
键控表格:

lookup2:( [date:(2018.01.01 + til 5); a:`a`b`c`d`e] b:1000*til 5)
t lj lookup2

基于@nyi的答案。 “翻转”的另一种方法是使用“连接每个” 这将稍微快一点,但在较大的数据集上可能会很明显

q)\ts update b:lookup[flip (date;a)] from 1000000#t
904 101750064
q)\ts update b:lookup[date,'a] from 1000000#t
343 101750064

基于@nyi的答案。 “翻转”的另一种方法是使用“连接每个” 这将稍微快一点,但在较大的数据集上可能会很明显

q)\ts update b:lookup[flip (date;a)] from 1000000#t
904 101750064
q)\ts update b:lookup[date,'a] from 1000000#t
343 101750064