Postgresql 获取每个组中的最后N行,其中N值是基于联接表的动态值

Postgresql 获取每个组中的最后N行,其中N值是基于联接表的动态值,postgresql,postgresql-9.5,Postgresql,Postgresql 9.5,所以有两张桌子 table_1 - id, limit_number table_2 - id, created_at, table_1_id 我们的要求是为每个表1的id组选择表2中的最后N行,其中N是limit\u number 样本数据 table_1 id, limit_number 1, 3 2, 1 结果应该是 table_2 id, created_at, table_1_id 2, ..., 1 3, ..., 1 4, ..., 1 6, ..., 2 每个表1\u

所以有两张桌子

table_1 - id, limit_number
table_2 - id, created_at, table_1_id
我们的要求是为每个表1的id组选择表2中的最后N行,其中N是
limit\u number

样本数据

table_1

id, limit_number

1, 3
2, 1
结果应该是

table_2

id, created_at, table_1_id
2, ..., 1
3, ..., 1
4, ..., 1
6, ..., 2
每个
表1\u id
返回的值如下
限制编号


我尝试使用
PARTITION()
函数来分配列组,但它对动态值N不起作用。如有任何帮助,将不胜感激。谢谢

以下是您的操作方法:

select t2.*
from
(
    select *,row_number() over (partition by table_1_id order by created_date desc) rn from table2
)t2 
join table_1 t on t.limit_number >= t2.rn and t2.table_1_id = t.id

您可以更改
创建的\u date desc
,以便更改任何有意义的内容,如
Id desc

出色的工作方式。非常感谢。
select t2.*
from
(
    select *,row_number() over (partition by table_1_id order by created_date desc) rn from table2
)t2 
join table_1 t on t.limit_number >= t2.rn and t2.table_1_id = t.id