2017-11-29 13 views
2

EURUSD, USDINR 등과 같은 기호가 포함 된 열이 있습니다. 통화의 처음 세 개 또는 세 개의 알파벳 중 하나가 이 목록에 속한 쌍은이 목록에 속합니다.
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 

될 추가 있지만 다음 대안은 아마 더 빨리 될 것입니다 :

01 2,327,995,892,
1

같은 예제를 제공 테이블 t와 알렉산더 예에서 참조 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

또 다른 대안입니다. 각 쌍의 참조를 확인하고 결과 목록의 각 쌍의 값을 비교합니다.

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