我正在尝试构建一个查询,以获取可以在mysql、oracle10和oracle12中使用的最新记录。
场景:我有4个表-customer,address,loan,application我想连接这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条记录,因为在一个日期的地址中,有多条记录的地址类型为客户的“studio”。
如何获取最新记录。
最后,我希望应用程序的address表中有address列,customer表中有name。
谢谢。
1条答案
按热度按时间qni6mghb1#
对于同时适用于oracle和mysql的代码,我建议使用一个相关子查询:
如果您使用的是mysql 8+或者不需要mysql,那么您应该使用mysql
row_number()
正如蒂姆所说。注意,我删除了
left join
. 这个join
至customer
正在使用中的字段loan
,将外部联接转换为内部联接。您还可以表示实际实现的逻辑。