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

Get last N rows in each group where N value is dynamic based on joined table

所以有2张表,

table_1 - id, limit_number
table_2 - id, created_at, table_1_id

我们的要求是 select 每个 table_1_id 组的 table_2 中的最后 N 行,其中 N 是 limit_number

示例数据

table_1

id, limit_number

1, 3
2, 1
table_2

id, created_at, table_1_id

1, ..., 1
2, ..., 1
3, ..., 1
4, ..., 1
5, ..., 2
6, ..., 2

结果应该是

table_2

id, created_at, table_1_id
2, ..., 1
3, ..., 1
4, ..., 1
6, ..., 2

每个 table_1_id 的返回值都在 limit_number 之后。

我尝试使用 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

您可以将 created_date desc 按顺序更改为任何有意义的内容,例如 Id desc