KDB+中按复合分组选取每组首行的简洁实现方法
KDB+按复合分组取每组第一行的简洁写法
针对多列场景,有两种简洁写法可以避免逐个列名编写first col:
方法一:使用select first each *
直接用*指代所有非分组列,配合first each一次性对所有列取每组第一行:
q) t:([]name:`c`c`c`w`w;id:1 1 1 2 1;c:2 4 5 4 3;d:10 20 30 40 50) // 新增d列示例 q) select first each * by name,id from t name id c d ----------- c 1 2 10 w 2 4 40 w 1 3 50
方法二:利用group函数结合first each
先按name和id分组得到每组的行索引,再取每组第一行并转成表:
q) 0!first each group[`name`id; t] name id c d ----------- c 1 2 10 w 2 4 40 w 1 3 50
这里0!的作用是将字典结果转换为表格式。
内容的提问来源于stack exchange,提问作者marital_weeping
相关产品推荐
相关产品推荐

