每个日期每个人计数一次

时间:2019-04-03 20:10:44

标签: sql sql-server

我有一个查询,查询一个人使用的保险和服务日期。如果某人在同一确切日期使用过医疗保险和牙科保险,那么我只想计算一下医疗保险。

With medical as
   ( select p.person_nbr as PNum
    , pe.date
    , pm.payer
    , 'Medical' as PayerGroup
    from person p
JOIN patient_encounter pe on p.person_id = pe.person_id
JOIN payer_mstr pm on pe.payer_id = pe.payer_id
where pm.payer like '%Medical%'

--insert medical into and create temp table 
SELECT
PNum
,Date
,Payer
,PayerGroup
INTO #WTEMP
FROM Medical; 

With dental as
   ( select p.person_nbr as PNum
    , pe.date
    , pm.payer
    ,'Dental' as PayerGroup
    from person p
JOIN patient_encounter pe on p.person_id = pe.person_id
JOIN payer_mstr pm on pe.payer_id = pe.payer_id
where pm.payer like '%Dental%'

--insert dental into temp table 
SELECT
PNum
,Date
,Payer
,PayerGroup
INTO #WTEMP
FROM Dental; 

--Pull from temp
select Pnum
,Date
,Payer
,PayerGroup
FROM #WTEMP
DROP TABLE #WTEMP;

如果那个人当天去看病,我基本上只是想消除牙科记录

2 个答案:

答案 0 :(得分:0)

我会使用GROUP BY子句。

假设Payer是“人员”,Date是“服务日期”,则可以尝试:

从#WTEMP中选择Pnum,日期,付款人,PayerGroup 付款人分组,日期 删除表#WTEMP;

答案 1 :(得分:0)

您可以使用窗口功能,例如Row_Number(),按PNum和Date对数据进行分区,并按Payer对数据进行排序。

输出将是这样

abc, '2019-03-01', 'Medical', 1
abc, '2019-03-01', 'Dental', 2

过滤1's

注意:由于表已经创建,因此我不确定您的SELECT INTO #WTEMP是否对医疗和牙科都适用。