我在此查询中使用两个表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
对不起,或这将是一个完整的答案。此查询不会在大多数SQL语言上运行,并且会引发错误,因此在使用aggreagtes时,您需要分组中的所有非聚合列。 MySQL喜欢跳过错误并随机获取不在组中的列的值。所以让我们摆脱这个聚合。你有子查询...编写一个子查询,通过你的密钥获取最大日期,将它加入到你的语句的其余部分,并从那里引用它。如果您需要进一步帮助,我会在几个小时内为您解决问题。 – Twelfth
@Telfelf好的,谢谢!我会为此努力。 – Hound
@Twelfth我试着按照你的指示,但我仍然无法让我的查询工作。如果你还有时间,我很乐意看到你想出了什么! – Hound