获取每个组中的最后 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
所以有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