左联接,仅返回右表的最后一条记录

时间:2020-10-29 04:02:23

标签: sql postgresql left-join

只是不起作用是我需要带上我称为second_table的右表的最后一行

table_one:
id
user_id

second_table
id
payment_instrument_id



select p_i.id, p_i.user_id,  a_r.id, a_r.table_one_id 
from table_one p_i
left join (
  select a_r.table_one_id, max(a_r.id) id
  from second_table a_r
  group by a_r.table_one_id
) lastSD on lastSD.table_one_id = p_i.id
left join second_table a_r on a_r.table_one_id = lastSD.table_one_id  

1 个答案:

答案 0 :(得分:1)

您加入JOIN的{​​{1}}条件不正确;您需要同时加入second_tablepayment_instrument_id仅获得最后一行:

id

输出(用于截断的数据样本):

select p_i.id, p_i.user_id,  a_r.id, a_r.payment_instrument_id 
from payment_instruments p_i
left join (
  select a_r.payment_instrument_id, max(a_r.id) id
  from second_table a_r
  group by a_r.payment_instrument_id
) lastSD on lastSD.payment_instrument_id = p_i.id
left join second_table a_r on a_r.payment_instrument_id = lastSD.payment_instrument_id and a_r.id = lastSD.id  
where p_i.user_id = 1030

请注意,您可以使用id user_id id payment_instrument_id 803 1030 86 803 958 1030 通过CTE简化代码:

ROW_NUMBER()

输出与第一个查询相同。

(两个查询的)演示on dbfiddle