代码之家  ›  专栏  ›  技术社区  ›  Aavik

Oracle:获取具有相同日期的最后一条记录

  •  0
  • Aavik  · 技术社区  · 6 年前

    我正在尝试构建一个查询,以获取可以在MySQL、Oracle10和12中使用的最新记录。

    脚本: 我想加入这4个表以获得应用程序的客户名称和地址。

    客户、贷款和申请之间有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); 
    

    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条记录的地址类型为客户的“studio”。

    如何获取最新记录。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gordon Linoff    6 年前

    对于同时在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,那么您应该使用MySQL row_number()

    请注意,我删除了 left join . 这个 join customer 正在使用来自的字段 loan ,将外部联接转换为内部联接。您还可以表达实际实现的逻辑。