Member 11820531 Ответов: 1

Как мне объединить 2 набора данных, одновременно вытягивая более позднюю дату вступления в силу, чтобы избежать дубликатов?


Я начну с того, чего я пытаюсь достичь:

- У меня есть текущая и историческая таблица.
- Я хочу проверить, был ли у одного и того же клиента в обеих таблицах когда-либо reason_iden_fk = 1.
- Если у них есть запись в обеих таблицах, я бы хотел взять более позднюю из 2.
- Как я могу принудительно вернуть самую последнюю дату вступления в силу из TL, в то время как все остальные даты игнорируются?

select 
 custid
,tl.effectivedate

from tblcurrent c 
    join translog tl 
        on c.custid = tl.custid
           and tl.reason_iden_fk = 1 

union 

select 

from tblhistory h 
    join translog tl 
        on h.custid = tl.custid
           and tl.reason_iden_fk


Что я уже пробовал:

Row_number ранжирует функции, но удар по производительности огромен.

RossMW

Я борюсь со структурой данных, потому что вы соединяете оба транслога с таблицами tblcustomer и tblhistory. Следовательно, если это одни и те же клиенты, то оба ваших оператора select вернут для этого клиента одни и те же записи транслога, так что результат будет одинаковым. Это означает, что таблица истории не имеет значения в запросе.

Я думаю, что вам нужно будет предоставить соответствующую структуру данных, образцы данных и ожидаемый результат, чтобы мы могли помочь вам в дальнейшем.

1 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

Если вас интересует последняя дата (либо форма текущей, либо архивная таблица), союз вам не поможет...
Объединение удалит дубликаты, но для последней даты вам придется сделать соединение между таблицами...
Что-то вроде этого:

select *
from table1
  left join table2 on table1.customer = table2.customer and table1.date > table2.date -- will bring only rows where there is not newer row in table2
where table2.customer is null

union

select *
from table2