2017-09-06 49 views
1

问:如何从小于其他表格最大值的日期选择中选择最大日期?

我怎样才能选择max(d1_10.dstartdate)(最新单位转移日期)为每xpid(患者ID)从选择日期在d1_10是小于每xpidmax(d8.start_date)(最近的一次会议日期) ?

的信息:

表:

  • d0病人列表表,含有每xpid(患者)1行
    • d0.xpid唯一的病人ID
  • d8会话表,包含每个xpid
    • d8.xpid病人ID
    • d8.start_date会议开始日期
  • d1_10单位转移表每节1行,包含每个xpid
    • d1_10.dstartdate每转移1行转让日期

问题:

目前,我有一个查询,列出xpidmax(d8.start_date)max(d1_10.startdate)。但是,max(d1_10.startdate)不一定小于max(d8.start_date)

我们的目标是让所有的患者,他们最新的会议日期的列表,而且还在之前的会议日期他们最新的转会日期。目前转移日期与会话日期无关。

我试过嵌套连接查询,但一直未能弄清楚调用变量的范围。

进展:

这是最接近运行的代码,我有:

select distinct 
    d0.xpid, 
    sessions.max_date, 
    units.max_unit 
from d0 
    left join 
     (
      select xpid, max(start_date) as max_date 
      from d8 
      group by xpid 
     ) as sessions on sessions.xpid = d0.xpid 
    left join 
     (
      select xpid, max(d1_10.dstartdate) as max_unit 
      from d1_10 
      group by xpid 
     ) as units on units.xpid = d0.xpid 

段从输出:

Output Sample

注意null值,这些都是很好的,我们想要这些。我们希望d0中的每位患者都有一行输出,不管他们在d8d1_10中的行如何。

在此先感谢,请让我知道,如果我可以提供更多的清晰度。

附加信息:

  • 尝试添加and units.max_unit <= sessions.max_date通过Sebastian的建议。这很接近,但不是由max_unit <= max_date限制,我们需要所有d1_10.dstartdate <= sessions.max_date之前采取最大。我们希望它限制它从采取最大值之前挑选的泳池units.max_unit

  • @Sebastian,假设xpid = 2500具有d1_10 3行与d1_10.dstartdate in ('01-jan-2017', '01-feb-2017', '01-mar-2017')max(d8.start_date) = '10-feb-2017'

    与您的建议,max_unit is null,因为max(d1_10.dstartdate) = '01-mar-2017',但'01-mar-2017 > '10-feb-2017'

    我们需要限制d1_10.dstartdate <= max(d8.start_date)之前采取最大限度。期望值应为max_unit = '01-feb-2017',因为这是此患者的最大转诊日期,小于此患者的最大会话日期。让我知道如果我能更好地清理它。

+1

请添加样本数据集 – SriniV

+1

添加'和d1_10.max_unit

+0

@ realspirituals这样做的首选方法? Excel表单中的.rar文件? – Jackson

回答

1

第二左边的条款添加

AND d1_10.max_unit < sessions.max_date 

的加入就足够了。

你的编辑后,请尝试一个:

SELECT d0.xpid, 
     d8.[start_date], 
     d1_10.dstartdate 
FROM d0 
LEFT JOIN d8 
    ON d0.xpid = d8.xpid 
LEFT JOIN d1_10 
    ON d1_10.xpid = d8.xpid 
    AND d1_10.dstartdate = (
           SELECT MAX(u1.dstartdate) 
           FROM d1_10 as u1 
           WHERE d8.xpid = u1.xpid 
           AND u1.dstartdate <= d8.start_date 
           GROUP BY u1.xpid 
          ) 
+0

原来,这没有做到。还没有,希望你能帮助我到那里 – Jackson

+0

添加信息添加问题的底部 – Jackson

相关问题