首页 文章

选择kdb中的语句不起作用

提问于
浏览
3

我在KDB中的select语句有问题,给出了奇怪的结果 . 数据是OPRA数据 . 即列出的期权交换数据 . 查询的对象是以10分钟为间隔给出特定 EXERCISE_PRICEEXERCISE_DATE 的最后一个ASK_PRICE . 该表只有1天 . 所以语句看起来像(并给出空结果):

select
    last ASK_PRICE by 10 xbar TRADE_TIME.minute 
from
    trade
where
    EXERCISE_PRICE=12 and EXPIRATION_DATE=2014.01.18

如果我改变语句以查看是否有可能适合查询的数据,我尝试:

select
    last ASK_PRICE,EXERCISE_PRICE by 10 xbar TRADE_TIME.minute
from
    trade
where
    EXERCISE_PRICE>12 and EXPIRATION_DATE=2014.01.18

我得到了以下结果,结果中出现了 EXERCISE_PRICE ,但也有小于12的值 . 结果被截断:

minute  ASK_PRICE EXERCISE_PRICE (the table header)

09:50   6.2 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 11 11 11 12 12 12 12 13 14 14 14 14 14 24 24 24 24 24 24 24 24 17 17 17 10 10

请注意,结果中 ASK_PRICE 为6.2,其余值为 EXERCISE_PRICE . 也就是说,时间段09:50的所有 EXERCISE_PRICE 值 .

所以我真的不清楚为什么当我指定> 12时我得到的值低于12.当我指定= 12时,我什么也得不到 .

表中的元信息将列 EXERCISE_PRICE 列为类型f,列 EXERCISE_DATE 为d,列 TRADE_TIME 为t, ASK_PRICE 为f .

1 回答

  • 4

    您的查询中存在隐藏错误 . 在where子句中使用 and 时,它等效于运行:

    "where EXERCISE_PRICE>(12 and EXPIRATION_DATE=2014.01.18)"
    

    这是因为kdb从右到左进行评估 - 尝试使用 , (逗号)来分隔您的where条件 .

    q)select last ASK_PRICE,EXERCISE_PRICE by 10 xbar TRADE_TIME.minute from trade where EXERCISE_PRICE>12 , EXPIRATION_DATE=2014.01.18
    

相关问题