如何按时间区间和category分组统计Id数量?KDB+技术问询
KDB+按时间区间和Category分组统计ID数量的实现方法
需求说明
需要按指定时间区间(如00:00-05:00、05:00-12:00等)和category字段分组,统计每组内id的数量。示例数据如下:
tab:([]time:1000?.z.t;category:1000?`a`b`c`d;id:1000?`abc`cdb`jiw`opw`jiofsef`lksfj)
实现步骤
1. 定义时间区间规则
先设定时间区间的分界点和对应的标签,方便后续分组:
// 定义区间分界点(.z.t类型,单位为毫秒) breaks: 0D05:00:00 0D12:00:00 0D17:00:00 0D24:00:00 // 对应区间的显示标签 labels: `00:00-05:00`05:00-12:00`12:00-17:00`17:00-24:00
若需要调整区间,直接修改breaks和labels即可(比如改成每3小时一组)。
2. 分组统计查询
通过binr函数将每条数据的time映射到对应的区间标签,再按时间区间+category分组统计id的数量:
select count[id] by timeRange: labels[binr[breaks; time]], category from tab
如果只需要按时间区间统计(不区分category),可以简化为:
select count[id] by timeRange: labels[binr[breaks; time]] from tab
结果说明
binr[breaks; time]:返回每条time在breaks数组中的索引位置,用于匹配对应的区间标签;timeRange:作为分组后的时间区间列名,显示对应的区间标签;- 最终结果会展示每个时间区间+category组合下的
id总数。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

