3

q に奇妙な問題が見つかりました。バグの可能性があると思います。入力として日付を指定すると、float を返す単純な関数を定義しました。

give_dummy:{[the_date] 
   /// give_dummy[2013.05.10]  // <- if u wanna test
   :$[ the_date > 2013.01.01 ; 0.001 ; 0.002] ;
 }

スタンドアロンで呼び出せば問題なく動作します:

q)give_dummy[2013.05.10]
0.001

それにもかかわらず、クエリでそれを呼び出そうとすると、エラーが発生します。

q)select  give_dummy[date] from tab where sym = sec, i >= first_i  , i < 4000
'type

入力日付 (ID 関数) を返すように関数を単純化すると、クエリで機能します。日付を比較せずに浮動小数点数を返すように関数を単純化すると、クエリで機能します。入力日付を使用して if ステートメントで比較すると、問題が発生します。 $[ the_date > 2013.01.01 ; 0.001 ; 0.002]

日付ではなく浮動小数点数を入力として受け取る関数を再定義し、クエリで入力として価格を指定しようとすると、同じことが起こります。

 give_dummy:{[the_price] 
    /// give_dummy[12]  // <- if u wanna test
   :$[ the_price > 20 ; 0.001 ; 0.002] ;
 }
 q) give_dummy[12]
 0.002
 q)select  give_dummy[price] from tab where sym = sec, i >= first_i  , i < 4000
 'type

なぜこれが起こるのか分かりますか?私はすべてを試しました。ありがとうマルコ

4

1 に答える 1

4

次のいずれかを行う必要があります。

select give_dummy each date from tab where ...

または:

give_dummy:{[the_date] :?[ the_date > 2013.01.01 ; 0.001 ; 0.002]; }
select give_dummy[date] from tab where ...

?ベクトル条件です。詳細については、こちらをご覧ください: http://code.kx.com/q4m3/10_Execution_Control/

于 2013-05-29T12:17:02.207 に答える