我在KDB中使用select语句时出现问题会产生奇怪的结果。数据是OPRA数据。即列出的期权交换数据。查询的目的是以10分钟为间隔为特定EXERCISE_PRICE
和EXERCISE_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。
答案 0 :(得分:4)
您的查询中存在隐藏错误。 在where子句中使用和时,它等同于运行:
"where EXERCISE_PRICE>(12 and EXPIRATION_DATE=2014.01.18)"
这是因为kdb +从右到左进行评估 - 尝试使用,
(逗号)来区分您的条件。
q)select last ASK_PRICE,EXERCISE_PRICE by 10 xbar TRADE_TIME.minute from trade where EXERCISE_PRICE>12 , EXPIRATION_DATE=2014.01.18