我对此感到困惑:请看下面的内容 . 为什么线(1)和(2)产生不同的结果?谢谢你的帮助 .
q)trade
date open high low close volume sym
------------------------------------------------
2006.10.03 24.5 24.51 23.79 24.13 19087300 AMD
2006.10.03 27.37 27.48 27.21 27.37 39386200 MSFT
2006.10.03 24.1 25.1 23.95 25.03 17869600 AMD
2006.10.03 27.39 27.96 27.37 27.94 82191200 MSFT
2006.10.03 24.8 25.24 24.6 25.11 17304500 AMD
2006.10.03 27.92 28.11 27.78 27.92 81967200 MSFT
2006.10.03 24.66 24.8 23.96 24.01 17299800 AMD
2006.10.03 27.76 28 27.65 27.87 36452200 MSFT
q)extr
{[t;c;r] select from t where (`$1#'string c) within r}
q)
q)
q)extr[trade;sym;`K`Z] / (1)
date open high low close volume sym
------------------------------------------------
2006.10.03 27.37 27.48 27.21 27.37 39386200 MSFT
q)
q)
q)select from trade where (`$1#'string sym) within `K`Z /(2)
date open high low close volume sym
------------------------------------------------
2006.10.03 27.37 27.48 27.21 27.37 39386200 MSFT
2006.10.03 27.39 27.96 27.37 27.94 82191200 MSFT
2006.10.03 27.92 28.11 27.78 27.92 81967200 MSFT
2006.10.03 27.76 28 27.65 27.87 36452200 MSFT
1 回答
第一个将变量
sym
传递给函数extr
. 该变量是 not 表trade
中的列;它是一个单独的(全局)变量 .这个变量
sym
的值很可能就是所以表达
产生布尔数组
而不是你想要的
这反过来意味着
select
语句的where
部分产生一个具有值的索引数组代替
因此返回表的一行,而不是您期望的四行 .