KDB将子选择转换为Q查询
我们在滴答数据上运行Q查询,该查询在1分钟条形图上合并到OHLCKDB将子选择转换为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
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