Oracle: получить последнюю запись с одинаковыми датами - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь создать запрос, чтобы получить последнюю запись, которую можно использовать в MySQL, Oracle 10 и 12.

Сценарий: у меня есть 4 таблицы - клиент, адрес, кредит, приложение, которое я хотелсоедините эти 4 таблицы, чтобы получить имя клиента и адрес для приложения.

клиент, кредит и приложение имеют отношение 1 к 1, а клиент и адрес имеют отношение 1 ко многим.

select count(c.name)
from application
left join loan on (loan.id = application.id)
inner join customer on (loan.cust_num = customer.id); 

Это дает 100 строк;

select count(c.name)
from application
left join loan on (loan.id = application.id)
inner join customer on (loan.cust_num = customer.id)
inner join address a1 on (loan.cust_num = address.cust_num)
inner join (
select max(date) as max_date, cust_num
from address
where address_type = 'studio'
group by cust_num 
) a2
on a1.cust_num = a2.cust_num
and a1.date = a2.max_date;

Это дает 200 записей, так как в адресе на дату существует более 1 записи, для которой address_type является 'studio' для клиента.

Как получитьпоследняя запись.

В конце я хотел получить адресные столбцы из таблицы адресов и имя из таблицы клиентов для приложения.

Спасибо.

1 Ответ

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

Для кода, который работает как в Oracle, так и в MySQL, я бы порекомендовал коррелированный подзапрос:

select count(c.name)
from application a join
     loan l
     on o.id = a.id join
     customer c
     on l.cust_num = c.id left join
     address ad
     on ad.cust_num = l.cust_num and
        ad.address_type = 'studio' and
        ad.date = (select max(ad2.date)
                   from address ad2
                   where ad2.cust_num  = ad.cust_num and
                         ad2.address_type = ad.address_type
                  );

Если вы используете MySQL 8+ или не нуждаетесь в MySQL, то вам следует использовать row_number() как подсказывает Тим.

Обратите внимание, что я удалил left join.От join до customer используется поле от loan, которое превращает внешнее соединение во внутреннее соединение.Вы могли бы также выразить логику, фактически осуществляемую.

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