[kx wiki のページ]
http://code.kx.com/wiki/JB:QforMortals/queries_q_sql#Functional_select
http://code.kx.com/wiki/JB:QforMortals2/queries_q_sql#Functional_select
[サンプルテーブル]
q) meta MarketData c | t f a --------------| ----- date | d sym | s p time | t bid | f ask | f marketDateTime| z date sym time bid ask marketDateTime ---------------------------------------------------------------------- 2014.01.02 USDJPY 07:00:02.111 105.231 105.271 2014.01.02T07:00:02.022 2014.01.02 USDJPY 07:00:05.222 105.232 105.272 2014.01.02T07:00:05.044 2014.01.02 USDJPY 07:00:05.333 105.233 105.273 2014.01.02T07:00:05.066
[使い方]
// //### // Functional Select // // @param t(symbol) - table name // @param c(List) - c is a list of where specifications (constraints) // @param b(Dict of List) - b is a dictionary of grouping specifications (by phrase) // @param a(Dict of List) - a is a dictionary of select specifications (aggregations) // @return Table //# t: `MarketData; c: enlist ( <; `marketDateTime; `datetime$2014.01.05 ); b: (enlist `time) ! (enlist (`marketDateTime)); // just by a: (enlist `price) ! enlist (last;`bid); ?[t;c;b;a] // Other Samples // 2 conditions c: ( (=; `date; 2014.01.02);(=; `sym; enlist `GBPJPY) ); // This phrase is equal to " by `datetime$ 0D00:00:01 xbar `timestamp$`marketDateTime " b: (enlist `time) ! (enlist (`timestamp$;`marketDateTime)); // b: (enlist `time) ! (enlist (`datetime$ 0D00:00:01 xbar `timestamp$;`marketDateTime) ); // cast to datetime // return 2 cols a: `bid`ask ! ((last;`bid);(last;`ask));c: (条件演算子・関数; カラム; 条件) のリスト
条件がsymbolの場合、そのままではだめっぽい。とりぜえずlistにするとOKだった。
b: (出力カラム名 ! by条件のリスト) のDict
by条件リストの書式は(条件; カラム名)。条件はなくても可,
特にbyでまとめる必要が無い場合は、0bを指定すればよい
a: (出力カラム名 ! 出力元カラム条件のリスト) のDict
出力元カラム条件のリストの書式は (条件演算子・関数; カラム名)。条件はなくても可
複数カラムを組み合わせるやり方は不明。。。
[Functional Selectの作り方例]
作成したいFunctional Selectと同様のselect文をstring形式で作成し、
parseするとFunctional Selectと同様の形式に展開される
q) parse "select from t" ? `t () 0b () / 1行で書くと、(?;`tab;();0b;()) となる。2つめからそれぞれ、t,c,b,a / つまり、?[`t;();0b;()] と書けばよい
0 件のコメント:
コメントを投稿