在Postgres中为每场比赛获取有限数量的行

时间:2016-03-11 06:27:49

标签: sql postgresql greatest-n-per-group

我有一张表:

1 a a1 a2
1 b b1 b2
1 c c1 c2
1 d d1 d2
2 a a1 a2
2 b b1 b2
2 c c1 c2
3........
3........
........
........
n x x1 x2
n y y1 y2
n z z1 z2

由此,我想得到每个数字(1,2,3,4 ...... n)一些指定数量(比如2)的行。

结果:

1 a a1 a2
1 b b1 b2
2 a a1 a2
2 b b1 b2
.........
.........
n x x1 x2
n y y1 y2

我正在尝试group bystring_agg()。但我无法将其限制为指定的数字。

我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

这可以使用window function

来完成
select nr, col1, col2, col3
from (
  select nr, col1, col2, col3,  
         row_number() over (partition by nr order by col1) as rn
  from the_table
) t
where rn <= 2;

如果要影响返回哪些行,可以调整定义窗口函数中行的顺序的order by