我怎样才能选择max(d1_10.dstartdate)
(最新单位转移日期)为每xpid
(患者ID)从选择日期在d1_10
是小于每xpid
的max(d8.start_date)
(最近的一次会议日期) ?
的信息:
表:
d0
病人列表表,含有每xpid
(患者)1行d0.xpid
唯一的病人ID
d8
会话表,包含每个xpid
d8.xpid
病人IDd8.start_date
会议开始日期
d1_10
单位转移表每节1行,包含每个xpid
d1_10.dstartdate
每转移1行转让日期
问题:
目前,我有一个查询,列出xpid
,max(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
段从输出:
注意null
值,这些都是很好的,我们想要这些。我们希望d0
中的每位患者都有一行输出,不管他们在d8
或d1_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'
,因为这是此患者的最大转诊日期,小于此患者的最大会话日期。让我知道如果我能更好地清理它。
请添加样本数据集 – SriniV
添加'和d1_10.max_unit
@ realspirituals这样做的首选方法? Excel表单中的.rar文件? – Jackson