【发布时间】:2018-09-01 00:32:52
【问题描述】:
我有三个运行良好的 CTE,并为我提供了我所要求的完整列表,但在最终结果中存在多个重复,因为在导出时,fax_date 包含时间和日期。我想按 Auth_Number 删除列表,以便删除 Dups 。基本上我想为每个唯一的 Auth_Num 加上所有细节。非常感谢任何帮助
With
Memb AS (
Select Distinct
mbc.Hsc_Id AS Auth_Number,
mbc.POL_ISS_ST_CD AS Policy_State,
mb.fst_nm AS Member_First_Name,
mb.lst_nm AS Member_last_name,
mb.mbr_id AS Member_Id
From icue.HSC_MBR_COV mbc
Left Join icue.hsc hs
On mbc.Hsc_Id = hs.hsc_id
Left Join icue.mbr mb
On hs.mbr_id = mb.mbr_id
Where mbc.POL_ISS_ST_CD = 'PA'
And (mbc.LOB_TYP_ID = '12' OR mbc.CLM_PLTFM_ID = 'A9'
Union
Select Distinct
mbc.hsc_id AS Auth_Number,
mbc.POL_ISS_ST_CD AS Policy_State,
mb.fst_nm AS Member_First_Name,
mb.lst_nm AS Member_last_name,
mb.mbr_id AS Member_Id
From icue.HSC_MBR_COV mbc
Left Join icue.hsc hs
On mbc.Hsc_Id = hs.hsc_id
Left Join icue.mbr mb
On hs.mbr_id = mb.mbr_id
Where mbc.POL_ISS_ST_CD = 'NJ'
And (mbc.LOB_TYP_ID = '12' OR mbc.CLM_PLTFM_ID = 'A9')
),
Fax_Sent AS(
SELECT Distinct
mbc.*,
cmt.CNTC_NM As Provider_Name,
cmt.FAX_NBR AS Fax_Number,
cmt.hsc_id AS Auth_num,
CASE When cmt.FAX_NBR ='201-553-7889' THEN 'Yes'
ELSE 'No'
END AS Fax_Sent
From Memb mbc
Left Join icue.cmnct_trans cmt
On mbc.Auth_Number = cmt.hsc_id
Where cmt.CNTC_NM ='CHILDRENS HOSP PHILADELPHIA'),
Letter_Sent AS(
Select Distinct
cmt.*,
act.Actv_strt_dttm AS Fax_Date,
CASE When ACTV_TYP_ID ='5' THEN 'Yes'
ELSE 'No'
END AS Letter_Sent
From Fax_Sent cmt
Left Join icue.actv act
On cmt.Auth_num = act.hsc_id
Where trunc(act.actv_strt_dttm) between to_date('19-FEB-2018','DD-MON-YYYY') and to_date('06-MAR-2018','DD-MON-YYYY')
)
【问题讨论】:
-
当您确实有多个日期时 - 应该使用哪个?理论上你想“分组”+聚合,但你必须告诉我们除了 Auth_Num 之外的每个字段使用什么聚合/规则
-
如果你不需要
fax_date值的时间分量,你能不能TRUNC它去掉多行? -
看看
ROW_NUMBER,当你PARTITION BY Auth_Number并应用一些订单你应该得到你想要的。 -
@dnoeth 谢谢!我按照你说的做了,得到了我想要的结果。我将把我的最终代码放在答案中。谢谢!!
标签: sql oracle duplicates