KDB从每个组中选择第一行

时间:2015-09-02 18:22:44

标签: select kdb

非常愚蠢的问题......考虑下面的表格t1,按照sym排序。

t1:([]sym:(3#`A),(2#`B),(4#`C);val:10 40 12 50 58 75 22 103 108)

sym val
A   10
A   40
A   12
B   50
B   58
C   75
C   22
C   103
C   108

我想选择与每个sym对应的第一行,如下所示:

(`sym`val)!(`A`B`C;10j, 50j, 75j)

sym val
A   10
B   50
C   75

要做到这一点必须是一个单行。要获得每个sym的最后一行,它就像select by sym from t1一样简单。任何提示?

2 个答案:

答案 0 :(得分:4)

您可以使用fby

q)select from t1 where i=(first;i) fby sym
sym val
-------
A   10 
B   50 
C   75 

答案 1 :(得分:3)

select first val by sym from t1

或者对于多列,您可以反转表并运行查询:

select by sym from reverse t1