这是我的问题:
我有两张桌子:
q)t1:([]sym:1 5;x: 90 90)
q)t2:([]sym: 2 3 4 6 7 8; y: 100 200 300 400 500 600)
如果我aj[`sym;t2;t1]
,结果表中的所有6列都将包含值为90的x。
但我想要的是仅在sym
2和6行中的第x列中的值90,即表sym
中的t2
第一次出现在表{{1}之前}。
换句话说,我希望结果表是这样的:
t1
有人能告诉我如何实现这一目标吗?非常感谢你!
答案 0 :(得分:1)
不确定是否可以在这种意义上使用aj。这可能会为您提供所需:
q)t2 lj 1!update sym:{x x binr y}[t2.sym;sym] from t1
sym y x
----------
2 100 90
3 200
4 300
6 400 90
7 500
8 600
使用binr查找大于t1中值的下一个值,然后仅加入该值。
编辑:还要注意binr是> = .....如果你需要严格大于你可以使用的
q)t2 lj 1!update sym:{x 1+x bin y}[t2.sym;sym] from t1
sym y x
----------
2 100 90
3 200
5 300
6 400 90
7 500
8 600
答案 1 :(得分:0)
你可以做aj来获得最接近的较小x数的索引,然后是一个向量条件,当该索引增加时得到x,即
select sym, y, x:?[c>prev c;x;0n] from aj[`sym; t2; update c:i from t1]