Postgresql 按组选择第n行Postgres

Postgresql 按组选择第n行Postgres,postgresql,greatest-n-per-group,Postgresql,Greatest N Per Group,我有一个问题属于“每个组最大n个”类别,但有一点扭曲。我有一张表格,内容如下: | t_id | t_amount | b_id | b_amount | |------|----------|------|----------| | 1 | 50 | 7 | 50 | | 1 | 50 | 15 | 50 | | 1 | 50 | 80 | 50 | | 3 | 50 |

我有一个问题属于“每个组最大n个”类别,但有一点扭曲。我有一张表格,内容如下:

| t_id | t_amount | b_id | b_amount |
|------|----------|------|----------|
| 1    | 50       | 7    | 50       |
| 1    | 50       | 15   | 50       |
| 1    | 50       | 80   | 50       |
| 3    | 50       | 7    | 50       |
| 3    | 50       | 15   | 50       |
| 3    | 50       | 80   | 50       |
| 17   | 50       | 7    | 50       |
| 17   | 50       | 15   | 50       |
| 17   | 50       | 80   | 50       |
我想做的是通过
t\u id
对这个表进行分区,然后选择第一个分区的第一行、第二个分区的第二行和第三个分区的第三行,结果如下所示:

| t_id | t_amount | b_id | b_amount |
|------|----------|------|----------|
| 1    | 50       | 7    | 50       |
| 3    | 50       | 15   | 50       |
| 17   | 50       | 80   | 50       |
它看起来像是一个窗口函数或是一个启用了
distinct的
的东西可能会起作用,但我还没有把它组合起来


我在*nix系统上使用Postgres 10。

使用窗口函数
densite\u rank
row\u number
就可以了


解决方案:

densite\u-rank
增加每个给定组的一个数字(在
t\u-id
上的分区)。因此,每个
t\u id
都有自己的值

B
row\u number
统计给定分区内的行数

我在这里演示了子查询的结果:

t_id  t_amount  b_id  b_amount  dense_rank  row_number  
----  --------  ----  --------  ----------  ----------  
1     50        7     50        1           1           
1     50        15    50        1           2           
1     50        80    50        1           3           
3     50        7     50        2           1           
3     50        15    50        2           2           
3     50        80    50        2           3           
17    50        7     50        3           1           
17    50        15    50        3           2           
17    50        80    50        3           3     

现在,您必须筛选组中的组数等于行数的位置,然后才能得到预期的结果

金色的。非常感谢。
t_id  t_amount  b_id  b_amount  dense_rank  row_number  
----  --------  ----  --------  ----------  ----------  
1     50        7     50        1           1           
1     50        15    50        1           2           
1     50        80    50        1           3           
3     50        7     50        2           1           
3     50        15    50        2           2           
3     50        80    50        2           3           
17    50        7     50        3           1           
17    50        15    50        3           2           
17    50        80    50        3           3