SQL 日期计数和最新值

问题描述 投票:0回答:1

我正在努力使用最近日期的值创建约会日期的计数。这将是一个更大查询的一部分,本质上,我试图找到系统中一年多前首次就诊的所有患者,在当前日历年中有 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 进行拉取,但这消除了我需要求和的其他访问。我尝试先对访问次数进行求和,然后取最大付款人,但这会导致“私人”,因为它按字母顺序选择最大付款人。有什么想法可以实现我想要实现的目标吗?

提前非常感谢您的帮助!

sql sql-server subquery
1个回答
0
投票

您可以尝试以下查询:

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
© www.soinside.com 2019 - 2024. All rights reserved.