代码之家  ›  专栏  ›  技术社区  ›  Chase J

SQL DB2 LUW V9.7连接到范围内最近的日期

  •  0
  • Chase J  · 技术社区  · 7 年前

    我试图加入到最近的日期与2表(从人到受伤),但只有当有一个记录在过去一个月内。

    PEOPLE
    
    Name          Date
    John Smith    01/01/2016
    Jerry Doe     01/14/2016
    Jane Ellis    02/21/2016
    Adam Patel    03/21/2016
    
    
    INJURIES
    
    Injury        Date
    Broken Hand   12/30/2015
    Broken Wrist  12/31/2015
    Head Pain     01/13/2016
    Broken Hand   02/02/2016
    
    
    OUTPUT1 (Able to achieve, but not desired)
    
    Name          Injury
    John Smith    Broken Hand
    John Smith    Broken Wrist
    Jerry Doe     Broken Hand
    Jerry Doe     Broken Wrist
    Jerry Doe     Head Pain
    Jane Ellis    Broken Hand
    Adam Patel    {null}
    
    OUTPUT2 (Desired Output)
    
    Name          Injury
    John Smith    Broken Wrist
    Jerry Doe     Head Pain
    Jane Ellis    Broken Hand
    Adam Patel    {null}
    

    有没有一种方法可以在流程的任何步骤中进行连接而不获得输出1?我正在处理大量的记录,并希望尽可能少的计算能力来完成这个连接。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ian Bjorhovde    7 年前

    尽管这是一个糟糕的设计,但此查询将返回您想要的结果:

    select
        p.name,
        (select injury
           from injuries x
          where x.date between p.date - 1 month and p.date
          order by x.date desc
          fetch first 1 row only)
    from 
        people p;
    

    出于性能原因,您需要提供一些额外的详细信息,但很可能您希望在上有一个索引 INJURIES.DATE

    我建议您寻找合适的键来加入表,因为单独使用date似乎是获取错误数据的好方法。