2017-09-06 177 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

相關問題