如有任何解释不清楚,敬请谅解。我正在努力变得更好..
假设我有一个函数 f 和三个变量:一个空表 A(需要按顺序插入每一行),一个静态表 B 和一个迭代器 i
B: ([] rdn: 6 2 5 3 2 3 8; col2: 7#`remove;
A:1#B;
f:{[x;y;z]
temp_a: select from x where i = (max i);
temp_b: select from y where i = z;
if[(exec first rdn from temp_b) > (exec first rdn from temp_a); x: x upsert temp_b];
:0!x;
};
从第 2 行(i = 2)开始,我想从 B 中获取第 i 行并与 A 的最后一行进行比较。 如果 (A[last row; rdn] < B[i; rdn] && B[i; col2] = `remove)
这是我想要的结果: |阅读全文 | col2 | | --- | ------ | | 6 |删除 | | 8 |删除 |
我的第一次尝试是做 夷平{[x;是; z] f[x;y;z]}[A; B; ] each (exec distinct i from B) //// 这不起作用,因为它不更新 A
我的第二次尝试是使用 over (/) {[x;y;z] f[x;y;z]}/[A; B; exec distinct i from B] // 绝对不对....
我不确定如何在函数中重新使用更新后的 A。我搜索了几个小时,但没有看到解决确切问题的相关帖子。提前感谢任何帮助!
如果我没看错你的问题,你想要 B 中
rdn
大于前一个 rdn
AND col2=remove 的行?如果是这样,那么您就不需要迭代,您可以执行以下操作:
q){select from x where test}update test:(col2=`remove)&(>)prior rdn from B
rdn col2 test
---------------
6 remove 1
8 remove 1
编辑:或者如果它是您需要的running maximum,那么:
q)select from B where rdn=maxs rdn
rdn col2
----------
6 remove
8 remove
如果您的问题比您解释的更复杂,并且您确实必须遍历表格的每一行,那么您可以使用以下内容:
q)distinct{$[x[`rdn]<y`rdn;y;x]}\[B]
rdn col2
----------
6 remove
8 remove