2016-09-20 12 views
3

KDBのselect文に奇妙な結果が生じる問題があります。データはOPRAデータです。すなわち、リストされたオプションはデータを交換する。照会の目的は、特定のEXERCISE_PRICEおよびEXERCISE_DATEの最後のASK_PRICEを10分間隔で与えることです。テーブルには1日しかありません。だから、声明は次のようになります(と空の結果が得られます):kdbのselect文が機能しない

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 

私は結果に12の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を指定すると何も得られません。

テーブルのメタ情報は、タイプF、カラムdとEXERCISE_DATE、カラムTとしてTRADE_TIME及びfとしてASK_PRICEとしてカラムEXERCISE_PRICEが得られます。

答えて

4

クエリに隠れたエラーがあるようです。 - あなたの条件を区切るには,(カンマ)を使用してみてください

"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 
+0

ありがとうございました。ソリューションが機能しました。私はこれについて私の頭を傷つけるのに多くの時間を費やしました。 – patrick

+2

回答があなたの質問を満たしていれば、他の人がそれを見つけるのを助けるために、それを受け入れられたものとしてマークしてください(またあなたもアップアップするかもしれません)。 – mkierc

関連する問題