【问题标题】:Select statement in kdb not workingkdb中的选择语句不起作用
【发布时间】:2016-09-20 15:43:28
【问题描述】:

我在 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,但值也小于 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。

【问题讨论】:

    标签: select kdb


    【解决方案1】:

    您的查询中似乎存在隐藏错误。 当您在 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
    

    【讨论】:

    • 谢谢。你的解决方案奏效了。我花了很多时间摸不着头脑。
    • 如果答案满足您的问题,请将其标记为已接受(您也可以投票)以帮助其他人找到它。
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多