Oracle: объединение двух таблиц с общим столбцом и дополнительным столбцом (последняя дата вступления в силу) из второй таблицы для выбора другого столбца - PullRequest
0 голосов
/ 03 декабря 2018

Соединение двух таблиц с общим столбцом и дополнительным столбцом (последняя дата вступления в силу) из второй таблицы для выбора другого столбца.Я присоединился к таблицам со всеми условиями, но в результирующей таблице есть повторяющиеся записи, поскольку в Таблице 2 имеется несколько записей для одного и того же идентификатора, из которых мне просто нужна запись с самой последней датой вступления в силу.Я использую Oracle.

Таблица 1 (столбцы A, B, C, D);Таблица 2 (C, Efft_date, X),Таблица3 ...

Результат должен быть таким, как показано ниже после объединения таблиц: A, B, C, X и столбцы из других таблиц

Значение X зависит от последнего / максимального значения efft_dateиз таблицы2.

Другая информация: есть другие таблицы, которые объединяются, и другие условия в предложении where.

Помогите, пожалуйста, присоединиться к таблицам без дубликатов

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вам необходимо присоединиться к подзапросу, чтобы получить только 1 «последнюю дату» для каждого значения столбца c.Для этого я рекомендую использовать row_number()

select t1.A, t1.B, t1.C, t1.D, t2.x, t2.efft_date
from table1 t1
inner join (
     select c, x, efft_date, row_number() over(partition by c order by efft_date DESC) as rn
     from table2
     ) t2 on t1.c = t2.c and t2.rn = 1
...

Обратите внимание, что при упорядочении дат по убыванию, самой последней дате будет присвоен номер строки 1. Следовательно, условие соединения and rn = 1 будет разрешать толькосамые последние даты должны быть включены в результат.

Изменение порядка на возрастающий порядок дат приведет к обратным результатам, просто допустим самые ранние даты.

0 голосов
/ 03 декабря 2018

Таким образом, вам необходимо дополнительно ограничить набор результатов на основе максимального значения table2.efft_date.Таким образом, вам нужно следующее предложение:

AND table2.efft_date = ( SELECT MAX( table2b.efft_date) 
                           FROM table2 AS table2b
                          WHERE table2b.c = table2.c )

Это предполагает, что table2 не может иметь повторяющиеся значения efft_date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...