1

この質問へのフォローアップ... KDB:特定のイベントの「前後」のデータの選択

市場データ T の巨大なテーブルを考えてみましょう。特に、Status=`SSS の行に関心があります。

ただし、(select from T where Status=`SSS) で指定された行に加えて、そのイベントの前後の特定の短い時間間隔内にあるレコードも選択したいと思います (以前の質問では、イベントを取り巻く固定数のレコード)。場合によっては、これらの間隔が重複する可能性があることに注意してください。これを行う効率的な方法は何ですか?

4

2 に答える 2

1

ここに役立つアイデアがあります。

q)n:10000000;
q)T:([]time:asc n?1D0;sym:n?3;price:n?100f;status:@[n?`3;-100000?n;:;`SSS])
q)f:{[t;x;d]t where 0<sums sum @[c#0;;+;]'[(-1+c:count t)&t[`time]binr/:x+/:-1 1*d;1 -1]}
q)f[T;exec time from T where status=`SSS;0D00:00:00.01]
time                 sym price     status
-----------------------------------------
0D00:00:01.169838756 2   77.1118   lbh
0D00:00:01.175813376 2   24.94157  emk
0D00:00:01.176316291 2   68.49994  SSS
0D00:00:01.180037856 1   81.54316  hhi
0D00:00:01.183518022 1   0.6516971 hni
0D00:00:01.291926205 2   51.94651  kjf
0D00:00:01.300173997 0   14.67675  SSS
0D00:00:01.309709250 1   82.77418  oji

ここでの考え方は、イベントの時間を抽出し、binr必要なすべての時間枠を見つけるために使用することです。

t1  t2  t3  t4  t5  t6  t7  t8  t9  t10
`a  `b  `c  `S  `d  `e  `S  `f  `g  `h

t3、t5、および t6、t8 がタイム ウィンドウに一致するとします。それらの周囲にマーカーを配置します。

t1  t2  t3  t4  t5  t6  t7  t8  t9  t10
`a  `b  `c  `S  `d  `e  `S  `f  `g  `h
0   0   1   0   0   1   0   0   0   0
0   0   0   0   0   -1  0   0   -1  0

sums sum必要なすべてのレコードが強調表示されます。

t1  t2  t3  t4  t5  t6  t7  t8  t9  t10
`a  `b  `c  `S  `d  `e  `S  `f  `g  `h
0   0   1   1   1   1   1   1   0   0

その後、残りは簡単です...

于 2014-08-21T08:49:08.580 に答える