SELECT 每个 ID 在一个查询中有多个 JOINS 的最后记录

SELECT last records for each ID with multiple JOINS in one query

我有这些表:

blocks TABLE        blocks_fields TABLE              
id|user_id|name     id|block_id|options_id|status    
 1|      1|block1    1|       1|         1|     1
 2|      1|block2    2|       2|         2|     0 
 3|      1|block3    3|       3|         3|     2
 4|      1|block4    4|       4|         1|     1

blocks_events TABLE        blocks_options TABLE
id|field_id|event|code     id|value1|value2
 1|       1| ev1 | 1234     1|    10|     A
 2|       2| ev1 | 5678     2|    20|     B
 3|       1| ev2 | 1234     3|    30|     C
 4|       3| ev1 | 9012     4|    10|     A

我正在尝试 select 每个代码的最后一个事件(最后插入的行),只知道 user_id

输出应该是这样的:

blocks_events.event|blocks_events.code|blocks_options.value1|blocks_options.value2
                ev2|              1234|                   10|                    A
                ev1|              5678|                   20|                    B
                ev1|              9012|                   30|                    C

我知道如何通过多个 select 获得此输出,但我想知道是否可以仅在一个 select.

中完成

这只是简单的内部联接,使用 row_number 仅获取每个代码的最新事件:

select event,code,value1,value2
from (
    select be.event,be.code,bo.value1,bo.value2,row_number() over (partition by be.code order by be.id desc) rn
    from blocks b
    join blocks_fields bf on bf.block_id=b.id
    join blocks_events be on be.field_id=bf.id
    join blocks_options bo on bo.id=bf.options_id
    where b.user_id=1
) latest_events_for_code
where rn=1