如何基于x列最大值筛选每个sym的唯一记录?
在kdb+中为每个sym保留x列最大值对应的完整记录
假设你已经通过以下查询得到了分组计数后的表t:
t:select count i by sym, typ from tbl;
要实现每个sym仅保留x列最大值对应的记录,有几种简洁的实现方式:
方法1:使用fby窗口函数(推荐)
fby是kdb+中用于分组计算的窗口函数,直接筛选出每个sym分组内x等于最大值的记录:
select from t where x=fby(max;x;sym)
这个语句会遍历表,对每个sym分组计算x的最大值,然后保留x等于该最大值的行,正好满足需求。
方法2:使用argmax和分组索引
argmax返回数组中最大值的索引,结合by分组可以定位到每个sym分组内x最大的行:
select from t where i=argmax x by sym
这里argmax x by sym会为每个sym分组计算x最大值对应的行索引i,然后筛选出这些索引对应的记录。
方法3:分组后关联最大值对应记录
先按sym分组,对每组内的typ和x,通过max和first关联对应关系(适用于每组x最大值唯一的场景):
select first typ, max x by sym from t
这种方式会直接按sym分组,取每组的最大x,同时取该x对应的typ,和你的需求场景匹配。
执行上述任意一种方法后,都会得到你期望的结果:
| sym | typ | x | ------------------- | ABC | A | 122 | | JKL | C | 19 | | XYZ | B | 206 | ...
内容的提问来源于stack exchange,提问作者vicefreak04
相关产品推荐
相关产品推荐

