在Q语言中如何从Kdb表中查询最近X分钟的对应行数据
Kdb查询最近X分钟价格数据的Q语句写法
首先默认你的价格表命名为price,表内包含时间戳类型的时间字段(示例统一用time作为字段名,可根据实际表结构替换)。
基础最简写法
如果你的时间字段是timestamp类型(kdb表最常用的时间格式),直接使用如下语句:select from price where time >= .z.P - X * 0D00:01:00
注释:
.z.P是kdb内置的当前时间戳变量,0D00:01:00代表1分钟的时间间隔,X是用户传入的自定义分钟数,直接相乘即可得到X分钟对应的时间偏移量。
如果时间字段是datetime类型,调整为:select from price where time >= .z.z - X % 1440
注释:
.z.z是当前datetime类型的时间,datetime的单位为天,1分钟等于1/1440天,所以用X除以1440得到对应的时间偏移。
生产环境可用的封装写法
可以对输入参数做合法性校验,避免异常输入导致报错:
// 入参X为用户输入的查询分钟数 getRecentPriceData: {[X] // 校验入参为数值类型 if[not (type X) in -7 9 10; :'"X必须为有效数值"']; // 校验查询时长大于0 if[X <= 0; :'"查询时长必须大于0"']; select from price where time >= .z.P - X * 0D00:01:00 }
性能优化建议
- 给时间字段添加排序属性
s#,可以大幅提升时间范围查询的性能,设置方式:updates#time fromprice - 如果是按天分区的历史存储表,额外加日期筛选条件避免扫描全部分区:
select from price where date = .z.D, time >= .z.P - X * 0D00:01:00
内容的提问来源于stack exchange,提问作者Ancat Dubher
相关产品推荐
相关产品推荐

