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

SQL DB2 LUW V9.7连接到范围内最近的日期,sql,join,db2,db2-luw,Sql,Join,Db2,Db2 Luw,我试图加入到最近的日期与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/

我试图加入到最近的日期与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而进行连接?我正在处理大量的记录,并希望以尽可能少的计算能力完成此连接

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

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;
出于性能方面的原因,您需要提供一些额外的详细信息,但很可能您希望有一个关于
伤害.DATE
的索引(最好按降序排列)


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

这是家庭作业吗?(很难想象任何一种真正的应用程序会试图仅根据日期将伤害分配给人)。不是的,我想做的是将处方与疼痛提供者给出的最后诊断联系起来。不幸的是,处方和就诊信息位于两个单独的表中。这可能是两个表,但它们应该有一个公用键-日期可能不是执行此操作的有用键-它可能是一个组件,但不是键。不幸的是,查看数据时,我无法在这两个表之间找到公用键,因为在我的案例中,医疗索赔与处方是分开处理的。表之间唯一的公共键是一个用于标识成员的数字。谢谢你的帮助,这就是我想要的答案。我意识到缺少一个合适的密钥的后果,但是这个解决方案充分利用了我现有的数据。