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
我有这些表:
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