我正在努力使用最近日期的值创建约会日期的计数。这将是一个更大查询的一部分,本质上,我试图找到系统中一年多前首次就诊的所有患者,在当前日历年中有 2 次或多次就诊,以及保险/付款人是什么在他们最近一次访问中。此查询仅关注日历年中 2 次以上的就诊以及最近就诊部分的保险。我有一个查询几乎就在那里,但由于需要分组,它根据付款人分离出了预约总和。这是我到目前为止所拥有的:
select
tab.PrimaryMrn
,sum(tab.Appt_Count) ct
,tab.Payor
from
(
select
PatientDim.PrimaryMrn
,VisitFact.AppointmentDateKey
,(CASE
WHEN CoverageDim.PayorFinancialClass IN ('Blue Cross Commercial','Commercial') THEN 'Private'
WHEN CoverageDim.PayorFinancialClass IN ('Managed Care','Medicaid','Medicaid Replacement','Medicare','Medicare Replacement','Pending Medicaid','Self-Pay') THEN 'Medicaid'
ELSE 'Other'
END) as 'Payor'
,count(distinct VisitFact.EncounterKey) Appt_Count
,row_number() OVER (PARTITION BY PatientDim.PrimaryMrn ORDER BY VisitFact.AppointmentDateKey DESC) AS rn
from VisitFact
INNER JOIN PatientDim
on VisitFact.PatientDurableKey = PatientDim.DurableKey and PatientDim.IsCurrent=1
INNER JOIN CoverageDim
ON VisitFact.CoverageKey = CoverageDim.CoverageKey
where VisitFact.AppointmentDateKey between '20230101' and '20231231'
group by PatientDim.PrimaryMrn ,VisitFact.AppointmentDateKey ,CoverageDim.PayorFinancialClass
) tab
group by PrimaryMrn, tab.Payor
order by PrimaryMrn
内部查询符合我的预期,给出如下结果:
小学先生 | 预约日期密钥 | 付款人 | Appt_Count | rn |
---|---|---|---|---|
1234567 | 20230724 | 医疗补助 | 1 | 1 |
1234567 | 20230427 | 私人 | 1 | 2 |
1234567 | 20230123 | 私人 | 1 | 3 |
对于最终结果,我想看到:
小学先生 | 付款人 | Appt_Count |
---|---|---|
1234567 | 医疗补助 | 3 |
“Medicaid”应作为“付款人”加入,因为它与最近一次就诊 (2023-07-24) 相关,并且由于有 3 次就诊,因此预约计数总计应为 3。然后,我将根据 Appt_Count 字段过滤此列表,仅包含两次或多次就诊的患者。
这就是我的查询实际给我的:
小学先生 | 付款人 | Appt_Count |
---|---|---|
1234567 | 医疗补助 | 1 |
1234567 | 私人 | 2 |
我尝试按行号 = 1 进行拉取,但这消除了我需要求和的其他访问。我尝试先对访问次数进行求和,然后取最大付款人,但这会导致“私人”,因为它按字母顺序选择最大付款人。有什么想法可以实现我想要实现的目标吗?
提前非常感谢您的帮助!
您可以尝试以下查询:
select
tab.PrimaryMrn
, REPLACE(max(AppointmentDateKeyPayor), max(AppointmentDateKey), '') Payor
,sum(tab.Appt_Count) ct
from (
select
PatientDim.PrimaryMrn
,VisitFact.AppointmentDateKey
,(CASE
WHEN CoverageDim.PayorFinancialClass IN ('Blue Cross Commercial','Commercial') THEN 'Private'
WHEN CoverageDim.PayorFinancialClass IN ('Managed Care','Medicaid','Medicaid Replacement','Medicare','Medicare Replacement','Pending Medicaid','Self-Pay') THEN 'Medicaid'
ELSE 'Other'
END) as 'Payor'
,VisitFact.AppointmentDateKey
+(CASE
WHEN CoverageDim.PayorFinancialClass IN ('Blue Cross Commercial','Commercial') THEN 'Private'
WHEN CoverageDim.PayorFinancialClass IN ('Managed Care','Medicaid','Medicaid Replacement','Medicare','Medicare Replacement','Pending Medicaid','Self-Pay') THEN 'Medicaid'
ELSE 'Other'
END) as 'AppointmentDateKeyPayor'
,count(distinct VisitFact.EncounterKey) Appt_Count
from VisitFact
INNER JOIN PatientDim
on VisitFact.PatientDurableKey = PatientDim.DurableKey and
PatientDim.IsCurrent=1
INNER JOIN CoverageDim
ON VisitFact.CoverageKey = CoverageDim.CoverageKey
where VisitFact.AppointmentDateKey between '20230101' and '20231231'
group by PatientDim.PrimaryMrn ,VisitFact.AppointmentDateKey
,CoverageDim.PayorFinancialClass
) tab
group by PrimaryMrn
order by PrimaryMrn