KDB将子选择转换为Q查询

KDB将子选择转换为Q查询,kdb,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(datet

我们在滴答数据上运行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,但由于双方都是合成的,因此也无法找到构造。

在我们进入子选择之前,您的查询存在几个问题。首先,datetime.minute.z.z是无效语法。这里可能不需要.z.z后缀。第二,1 xbar是冗余的:1 xbar x表示整数x,datetime.minute表示整数。只需执行datetime.date+datetime.minute即可将日期时间四舍五入为分钟。请注意,如果您使用时间戳,正如您应该使用的那样,取整将只是0D00:01 xbar timestamp,对于datetime,您必须将一分钟预计算为U:倒数24*60,并将其与xbar-U xbar timestamp一起使用。第四,将xbar的时间戳强制转换为by子句中的字符串。如果您真的希望它们作为字符串,那么在聚合后作为单独的更新来执行。最后,还有一些小问题,例如冗余括号和$which在q中应该拼写为string

现在,回到子选择。我认为,一旦解决了我上面强调的问题,您就会发现根本不需要子查询。结果的键列中已经有xbar的时间戳。如果希望将结果作为常规表-只需使用0