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

KDB中能否将时间类型用作表的列?附透视表实践问题

KDB中能否将时间类型用作透视表的列?

KDB完全支持将时间类型作为表的列名,你当前的代码没有得到预期透视表效果,是因为写法没有将字典展开为多列,而非时间类型不能作为列名。

问题原因

你执行的代码返回的是分组后的字典列,每个k对应一个以时间为键的字典,而非将时间直接作为表的独立列。

正确实现透视表的代码

要生成以时间为列名的透视表,只需将字典列展开并与分组键列合并:

t:([]k:1 2 3 2 3;p:09:00 09:30 10:00 09:00 09:30; v:10 20 30 40 50)
P:asc exec distinct p from t;
// 生成透视表:将字典列展开为时间列,合并到k列所在的表
([]k:exec distinct k from t) , flip exec P#(p!v) by k from t

执行后会得到预期的透视表:

k| 09:00 09:30 10:00
-| ------------------
1| 10    0N    0N
2| 40    20    0N
3| 0N    50    30

关于时间类型列名的说明

  • 时间类型作为列名是合法的,KDB允许用任意原子类型(符号、时间、整数、日期等)作为列名。
  • 访问时间类型列时,不能用.语法(如t.09:00),需用下标语法t[09:00];如果希望用.访问,可将时间转为符号类型(如exec $string p from t`)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:55:12