2017-11-29 9 views
2

EURUSD、USDINRなどの記号を含む列があります。通貨の最初の3文字または最後の3文字のアルファベットペアがこのリストに属しています
ref:( "INR"、 "BLR" ....)
次に、条件が満たされている場合は新しい列「結果」を作成して「はい」に更新する必要があります。 。kdbの他の列の値に基づいてフィルタを追加する

誰でもこれを手伝ってください。

q)show t:([]pair:`EURUSD`USDINR`BLRUSD`INRBLR`BLREUR) 
pair 
------ 
EURUSD 
USDINR 
BLRUSD 
INRBLR 
BLREUR 

q)ref:`USD`EUR 

簡単なクエリを考えるおかげで

答えて

3

記載されている "結果" 欄は

q)update result:((`$3_'string pair)in\:ref)or(`$3#'string pair)in\:ref from t 
pair result 
------------- 
EURUSD 1 
USDINR 1 
BLRUSD 1 
INRBLR 0 
BLREUR 1 

だろう追加しますが、次の代替は、おそらく速くなります。

q)update result:0<count each ref inter/:`$0 3_/:string pair from t 
pair result 
------------- 
EURUSD 1 
USDINR 1 
BLRUSD 1 
INRBLR 0 
BLREUR 1 
1

同じ例を与えるテーブルtとAlexanders例からの参照refあなたもマッチング開始と終了シーケンスの一覧構築することができます。

q)update max each pair like/:\:m from t 
pair m 
-------- 
EURUSD 1 
USDINR 1 
BLRUSD 1 
INRBLR 0 
BLREUR 1 

q)show m:{raze(s,\:"*";"*",/:s:string(),x)}ref 
"USD*" 
"EUR*" 
"*USD" 
"*EUR" 

は次に、これらの一致するペアを見つけることを

リストmをビルドしてクエリを実行する時間も考慮すると、この例は上記よりも効率が悪いです。リストmを作成する必要がある場合は、この例の方が効率的かもしれませんが、リストrefのサイズによって異なります。

2

別の方法です。各ペアのrefと、結果リスト内の各値のペアのORを確認します。

q)ref:`USD`EUR 
q)update result:(|/')ref in/: `$0 3_/: string pair from t 
pair result 
------------- 
EURUSD 1 
USDINR 1 
BLRUSD 1 
INRBLR 0 
BLREUR 1 
関連する問題