kdb函数不工作

kdb函数不工作,kdb,Kdb,我对此感到困惑:看看下面这个。为什么第(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.3

我对此感到困惑:看看下面这个。为什么第(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

第一个函数将变量
sym
传递给函数
extr
。此变量不是表
trade
中的列;它是一个单独的(全局)变量

此变量
sym
的值可能仅为

`AMD`MSFT
那么这个表达呢

(`$1#'string c) within r
生成布尔数组

01
而不是你想要的

 01010101
这反过来意味着
select
语句的
where
部分生成一个具有值的索引数组

 1
而不是

 1 3 5 7
因此,将返回表中的一行,而不是预期的四行