2017-07-03 8 views
0

1分のバーでOHLCに統合されたティックデータ上で実行されるQクエリがあります。KDB副選択をQクエリに変換

select subsel:(
     exec last datetime.date+1 xbar datetime.minute.z.Z 
      from `base 
      where instrument=`GBPUSD, 
      datetime=datetime.date+1 xbar datetime.minute.z.Z), 
     max(datetime), 
     min(datetime), 
     Open:first price, 
     High:max price, 
     Low:min price, 
     Close:last price, 
     Volume:count(i) 
    by DT:($)datetime.date+1 xbar datetime.minute.z.Z 
    from `base 
    where instrument=`GBPUSD, 
    datetime>=2017.07.03T10:20:00.00, 
    datetime<2017.07.03T10:20:59.999 

問題はXBAR日がメインテーブルと「副選択」、EXECの両方で合成される「日時=」メインテーブルを参照する必要があり、使用するエイリアスアプローチを見つけることができません。 Ejと見なされたが、両者が合成であるため、構造を見つけることができなかった。

答えて

0

サブセレクトに至るまでに、いくつかの問題があります。まず、datetime.minute.z.Zの構文が無効です。おそらく、そこに接尾辞.z.Zという接尾辞は必要ありません。第2に、1 xbarは冗長です。xdatetime.minuteが整数の場合、1 xbar xxです。ちょうどdatetime.date+datetime.minuteを実行して、日付時刻を四分に丸めることができます。 (タイムスタンプを使用する場合、丸めは単純に0D00:01 xbar timestampになります。datetimeの場合は、U:reciprocal 24*60として事前計算し、xbar - U xbar timestampでそれを使用する必要があります)。第4に、xbarのタイムスタンプをby節。実際にそれらを文字列として使用する場合は、集計後に個別の更新として行います。最後に、重複したかっこや($)のような小さな問題があり、qの中にはstringという綴りがあります。

ここで、副選択に戻ります。上記で強調した問題を解決すると、サブクエリはまったく必要ないことがわかります。結果には既にキー列にxbar個のタイムスタンプがあります。結果を通常のテーブルとして使用する場合は、0!を使用してください。

関連する問題