首页 文章

kdb功能不起作用

提问于
浏览
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

1 回答

  • 3

    第一个将变量 sym 传递给函数 extr . 该变量是 nottrade 中的列;它是一个单独的(全局)变量 .

    这个变量 sym 的值很可能就是

    `AMD`MSFT
    

    所以表达

    (`$1#'string c) within r
    

    产生布尔数组

    01
    

    而不是你想要的

    01010101
    

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

    1
    

    代替

    1 3 5 7
    

    因此返回表的一行,而不是您期望的四行 .

相关问题