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

q/kdb+中如何按±1天日期偏差分组生成uniqueid

解决方案:为存在生日±1天偏差的儿童生成统一UniqueID

核心思路

先按dadname和mumname分组,在每组内将相差≤1天的childdob归为同一簇,再为每个簇分配唯一ID,最终映射回原表生成uniqueid列。

具体实现代码

1. 定义日期聚类函数

该函数将一组日期中相差≤1天的日期聚合成同一簇:

clusterDates:{
    if[count x=0; enlist enlist x];
    sorted:asc x;
    diffs:1_deltas sorted;
    splits:where diffs>1;
    if[count splits=0; enlist sorted];
    raze {sorted[x+1 y]} each (0,-1_splits) cross (1,1+splits - 1_0,splits)}

2. 生成日期到UniqueID的映射表

对每个dadname,mumname组内的日期簇分配唯一ID:

// 单组内生成日期-ID映射
dateMap:{[g]
    dates:exec distinct childdob from g;
    clusters:clusterDates dates;
    idMap:raze {[c;i] (c)!enlist i} each clusters til count clusters;
    idMap}

// 全局分组处理,得到所有日期的映射
grouped:group peopletb by dadname,mumname;
allMaps:raze dateMap each grouped;

3. 为原表添加uniqueid列

将映射关系应用到原表:

peopletb:update uniqueid:allMaps[childdob] by dadname,mumname from peopletb

效果验证

执行后查看表,以下两组会拥有相同的uniqueid:

  • mike rachel 2007.02.05、mike rachel 2007.02.06
  • francis anne 2007.04.12、francis anne 2007.04.13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:50:05