I po prostu nie działa, jest to, że potrzebuję przynieść ostatni wiersz prawego tabeli, który nazywam drugim_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
FERNANDO ORTIZ 29 październik 2020, 07:02

1 odpowiedź

Najlepsza odpowiedź

Stan JOIN dla twojego dołączenia do second_table jest nieprawidłowy; Musisz dołączyć do obu payment_instrument_id i id, aby uzyskać tylko ostatni wiersz:

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

Wyjście (dla skróconej próbki danych):

id      user_id     id  payment_instrument_id
803     1030        86  803
958     1030        

Uwaga Możesz uprościć swój kod za pomocą CTE przy użyciu {x0}}:

WITH a_r AS (
  SELECT id,
         payment_instrument_id,
         ROW_NUMBER() OVER (PARTITION BY payment_instrument_id ORDER BY id DESC) AS rn
  FROM second_table
)
SELECT p_i.id, p_i.user_id, a_r.id, a_r.payment_instrument_id 
FROM payment_instruments p_i
LEFT JOIN a_r ON a_r.payment_instrument_id = p_i.id AND a_r.rn = 1

Wyjście jest takie samo jak pierwsze zapytanie.

Demo (z obu zapytań) na dbfiiddle

1
Nick 29 październik 2020, 04:13