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

ks-*_*man 4 max min kdb

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

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

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

谢谢

Rah*_*hul 5

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

       q) a: 4 3 5 1 6 8
       q) max a except max a  / second maximum
       q) min a except min a  / second minimum
Run Code Online (Sandbox Code Playgroud)

但如果您想要适用于任何第 n 个最小值/最大值的通用函数,这里有一种方法:

对于第 N 个最大值

       f:a (idesc a)[n-1]   
       q) a (idesc a)[2-1]    // second maximum
Run Code Online (Sandbox Code Playgroud)

对于第 N 个最小值

       f: a (iasc a)[n-1]  
       q) a (iasc a)[2-1]   // second minimum
Run Code Online (Sandbox Code Playgroud)