2016-08-05 107 views
0

我在此查詢中使用兩個表Table 1: admit,Table 2: Billing. 我想要做的是顯示被納入我們的危機服務(program codes '44282' and '44283')的人。對於這些人,我想在結算表中顯示他們的保險,該保險位於guarantor_id字段下。爲此,我需要顯示覆蓋生效日期小於入場日期preadmit_admission_date且覆蓋到期日期cov_expiration_date大於入場日期(或爲空)的所有最大覆蓋生效日期cov_effective_date。我現在擁有的代碼可以完成我想要的任何事情,但不會獲得所有最大覆蓋生效日期。所以如果有人有兩個不同的保險開始於同一天,它只會顯示一個,我希望它顯示兩個。選擇所有最大值SQL查詢

Select 
A.patid 
,A.episode_number 
,A.preadmit_admission_date 
,A.program_code 
,A.program_value 
,A.c_date_of_birth 
,A.guarantor_id 
,max(A.cov_effective_date) as "MaxDate" 

from(

Select 
    SA.patid 
,SA.episode_number 
,SA.preadmit_admission_date 
,SA.program_code 
,SA.program_value 
,SA.c_date_of_birth 
,BGE.guarantor_id 
,BGE.cov_effective_date 

From System.view_episode_summary_admit as "SA" 

Left Outer Join 

(Select 
    BG.patid 
    ,BG.episode_number 
    ,BG.guarantor_id 
    ,BG.cov_effective_date 
    ,BG.cov_expiration_date 

    from System.billing_guar_emp_data as "BG" 

    Inner Join 

    (Select patid, episode_number, preadmit_admission_date 
    from System.view_episode_summary_admit) as "A" 
    On 
    (A.patid = BG.patid) and (A.episode_number = BG.episode_number) 

    Where 
    BG.cov_effective_date <= preadmit_admission_date and 
(BG.cov_expiration_date >= preadmit_admission_date or 
    BG.cov_expiration_date Is Null) 
) as "BGE" 
    on 
(BGE.patid = SA.patid) and (BGE.episode_number = SA.episode_number) 

    Where 
    (program_code = '44282' or program_code = '44283') 
    and preadmit_admission_date >= {?Start Date} 
    and preadmit_admission_date <= {?End Date} 
    ) A 

    Group By Patid, Episode_number 
+0

對不起,或這將是一個完整的答案。此查詢不會在大多數SQL語言上運行,並且會引發錯誤,因此在使用aggreagtes時,您需要分組中的所有非聚合列。 MySQL喜歡跳過錯誤並隨機獲取不在組中的列的值。所以讓我們擺脫這個聚合。你有子查詢...編寫一個子查詢,通過你的密鑰獲取最大日期,將它加入到你的語句的其餘部分,並從那裏引用它。如果您需要進一步幫助,我會在幾個小時內爲您解決問題。 – Twelfth

+0

@Telfelf好的,謝謝!我會爲此努力。 – Hound

+0

@Twelfth我試着按照你的指示,但我仍然無法讓我的查詢工作。如果你還有時間,我很樂意看到你想出了什麼! – Hound

回答

1

對不起,這是這樣一個假的答案。

Select (your fields) 
from (your entire query)bg 
left join 
    (select patid, max(cov_effective_date) maxdate from system.billing_guar_emp_data group by patid) maxdate 
on maxdate.patid = bg.patidate 

刪除集合的組bys ...現在可以在打開的select語句中引用maxdate.maxdate作爲字段。可能是一個更好的地方來加入這個maxdate,而不是在查詢的最後加入(可能正好在from語句的BG下),但是僞代碼正確嗎? :)希望你能應用這個概念,如果你需要更多,請告訴我我下午有空(更自由?)。

+0

Sweet,我把左連接改成了一個內連接,並加入了集數,日期以及patid,它起作用了!謝謝您的幫助! – Hound