KDB将子选择转换为Q查询

时间:2017-07-03 14:18:05

标签: kdb

我们在刻度数据上运行Q查询,并在1分钟内合并到OHLC。

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日期在主表和'subselect'上都是合成的,exec“datetime =”需要引用主表并且找不到别名的使用方法。考虑到ej,但由于双方都是合成的,也找不到构造。

1 个答案:

答案 0 :(得分:1)

在我们进入子选择之前,您的查询存在一些问题。首先,datetime.minute.z.Z是无效的语法。您可能不需要.z.Z后缀。其次,1 xbar是多余的:1 xbar x对于整数xxdatetime.minute是整数。您只需执行datetime.date+datetime.minute即可将日期时间舍入为分钟。 (请注意,如果你使用时间戳,你应该使用时间戳,舍入只是0D00:01 xbar timestamp,对于日期时间,你必须预先计算一分钟U:reciprocal 24*60并将其用于xbar - {{ 1)}。)第四,将U xbar timestamp&#39; d时间戳转换为by子句中的字符串。如果你真的想要它们作为字符串 - 在聚合之后将其作为单独的更新。最后,还有一些小问题,例如冗余括号和xbar,其中q应拼写为($)

现在,回到子选择。我想一旦你解决了我上面提到的问题,你会发现你根本不需要子查询。结果将在密钥列中包含string&t; d时间戳。如果您希望将结果作为常规表 - 只需使用xbar