2016-08-05 10 views
0

私はこのクエリで2つのテーブルを使用していますTable 1: admitTable 2: Billing. 私がしたいことは、危機管理サービスに認められた人を表示することです(program codes '44282' and '44283')。これらの人々のために、私は彼らの保険を提示したい、それは、課金テーブルのフィールドguarantor_idの下にある。これを行うには、適用範囲の有効日が入学日preadmit_admission_date未満で、適用範囲満了日cov_expiration_dateが入学日(またはNull)より大きい場合は、最大適用範囲の有効日のすべてを表示する必要があります(cov_effective_date)。私が今持っているコードは、私が望むすべてのことをしますが、すべての最大有効範囲の有効日を取得しません。だから誰かが同じ日に始まった2つの異なる保険を持っていたら、それは1つしか表示されません。すべての最大値を選択する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

@Twelfth Ok、ありがとう!私はそれに取り組んでいきます。 – 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

甘い、私は内部結合に左の結合を変更し、エピソード番号と日付とpatidに参加し、それは働いた!助けてくれてありがとう! – Hound

関連する問題