【问题标题】:SQL Dedupped in CTECTE 中的 SQL 重复数据删除
【发布时间】: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


【解决方案1】:

谢谢大家!我确实在 Auth_Number 上执行了 row_number 函数,并且能够删除我的列表。我还为该列添加了一个 desc,并在最终 CTE 中从“DP”列中删除。

Letter_Sent AS(  
Select Distinct
cmt.*,
TRUNC(act.actv_strt_dttm)                       AS Fax_Date,
ROW_NUMBER () OVER (PARTITION BY cmt.Auth_num ORDER BY act.actv_strt_dttm,TRUNC(act.actv_strt_dttm)DESC)DP,
CASE When act.ACTV_TYP_ID ='5' THEN 'Yes'---"Manual letter sent "
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')
)
Select * From Letter_Sent Where DP = '1' 

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    相关资源
    最近更新 更多