You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KDB中获取当日最高报价对应的时间及完整数据行?

KDB按日期分组提取m列最大值对应行的解决方案

错误原因

你使用的查询语句触发length错误,核心原因是in操作的左右两侧结构不匹配:

  • 左侧(t.date,m)生成的是每行对应一个(date, m) pair的列,长度与原表一致
  • 右侧select max m by t.date from q返回的是分组表(包含t.date和max m两列),并非可直接匹配的pair列表,导致in无法正确执行。

正确实现方法

以下三种方法均可实现按t.date分组,提取m列最大值对应的完整数据行:

方法1:使用fby(最简洁高效)

KDB的fby(filter-by)语法可直接在分组内筛选符合聚合条件的行:

select from q where m = fby(max; m; t.date)

说明:fby(max; m; t.date)会为原表每行计算其所属t.date分组内的m最大值,随后筛选出m等于该最大值的行。

方法2:等值连接(ej)+ 筛选

先生成每个日期的m最大值表,再通过ej按日期与原表连接,最后筛选匹配行:

select from ej[`t.date; q; select max_m:max m by t.date from q] where m = max_m

方法3:构造匹配的pair列表

将分组结果转换为(date, max_m)的pair列表,再用in进行匹配:

// 生成每个日期对应的(date, max m) pair集合
max_pairs: value exec (t.date, max m) by t.date from q;
// 筛选原表中符合条件的行
select from q where (t.date, m) in max_pairs

也可合并为一行执行:

select from q where (t.date,m) in value exec (t.date, max m) by t.date from q

内容的提问来源于stack exchange,提问作者cjm2671

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:30:21