选择KDB中的第二大或最小数字

时间:2014-12-19 13:12:37

标签: max min kdb

有没有一种简单的方法可以找到表格的一组列中的第二大或最小数字?

我可以使用select min / max (a, b, c, d) by i from t轻松找到最大或最小的。

然而,我似乎无法找到一种简单的方法来找到该组中的第二个(或第三个)最大或最小的。

由于

2 个答案:

答案 0 :(得分:4)

如果您只需要第二个最大值/最小值,则可以使用:

       q) a: 4 3 5 1 6 8
       q) max a except max a  / second maximum
       q) min a except min a  / second minimum

但是如果你想要适用于任何nth min / max的通用函数,这里有一种方法:

第N个最高

       f:a (idesc a)[n-1]   
       q) a (idesc a)[2-1]    // second maximum

第N个最低

       f: a (iasc a)[n-1]  
       q) a (iasc a)[2-1]   // second minimum

答案 1 :(得分:1)

您可以尝试使用rank

q)a:10?100
q)a
65 93 15 82 76 14 75 78 44 79
q)f:{x where y=rank x}
q)f[a;1]              / second smallest
,15
q)f[a;2]              / third smallest
,44

我认为q中没有反向rank函数,所以你可以这样做:

q)f2:{x where y=iasc idesc x}
q)f2[a;1]             / second biggest
,82
q)f2[a;2]             / third biggest
,79

http://code.kx.com/q/ref/sort/#rank