创建子查询

时间:2014-02-07 06:30:57

标签: sql oracle subquery

子查询帮助

我在创建子查询时遇到问题(我认为)并且希望得到一些指导。为简单起见,有些事情已被推广。

Select
A
b
c
d
e
Member ID
Hospital Admit Date
DRG Code
CLM_LN_SVC_FROM_DT

From
Claims Table

Where
DRG Code = 5
And A
And B
And c

我想将此查询的结果专门用于会员ID和会员的不同医院许可日期,并针对所有索赔查询索赔表: 其中的会员ID(来自上述查询的结果),此时我需要在录取日期前30天和录取日期后180天内提出索赔。这是我在努力设置这个子查询的地方。任何超出我有限基础的才华都会非常感激......

1 个答案:

答案 0 :(得分:0)

听起来你需要类似于以下查询:

Select Distinct
       ClaPeriod.MemberId,
       ClaPeriod.DRGCode,
       ClaPeriod.ClaimDate,
       ClaPeriod.AdmittedDate,
       A,
       B,
       C,
       D,
       E
  From Claims ClaMain,
       Claims ClaPeriod
 Where (ClaMain.MemberId, ClaMain.AdmittedDate) In (
                                                      Select MemberId, AdmittedDate
                                                        From Claims claId
                                                       Where DRGCode = 5
                                                   )
   And ClaMain.MemberId = ClaPeriod.MemberId
   And ClaPeriod.AdmittedDate >= ClaMain.AdmittedDate - 30 
   And ClaPeriod.DischargedDate <= ClaMain.AdmittedDate + 180                   
 Order By ClaPeriod.MemberId, ClaPeriod.AdmittedDate

说实话,我仍然不确定我是否已完全理解您的架构。我必须在我的sql测试中包含Distinct子句以避免重复结果。如果我错过了标记,请告诉我,我会尽力改善答案。


更新:根据OP的评论,现在架构对我来说更清晰了,我会尝试改进答案。

据我了解,您需要获得所有声明:

  • 与DRG = 5的索赔具有相同的MBR_ID。
  • 在DRG = 5声明的CLM_LN_SVC_FROM_DT(From_Date)之前或之前30天有一个HOSP_ADMT_DT(允许日期)。
  • 在DRG = 5索赔的CLM_LN_SVC_FROM_DT(From_Date)后至少180天内有HOSP_DSCHRG_DT(出院日期)。

如果是这样,可以使用将CLM_MED_DETL连接到自身的查询来完成。 ne table将过滤DRG = 5的声明,另一个用于检索具有相同MBR_ID且符合日期条件的声明。这将是一个如下的查询:

  Select CLAIMS.CLM_MED_DETL_ID,
         CLAIMS.CLM_LN_CURR_STAT_TXT,
         CLAIMS.CLM_ID_TXT,
         CLAIMS.SVCG_PROV_NAME,
         CLAIMS.SBMTD_DRG_CD,
         CLAIMS.RVNU_CD,
         CLAIMS.PLC_OF_SVC_CD,
         CLAIMS.CLM_SRC_CD,
         CLAIMS.CLM_LN_SEQ_NUM,
         CLAIMS.CLM_LN_PRCDR_CD,
         CLAIMS.MBR_ID,
         CLAIMS.MBR_LST_NAME,
         CLAIMS.MBR_FST_NAME,
         CLAIMS.SVCG_PROV_ADDR_ZIP_CD,
         CLAIMS.SVCG_PROV_ADDR_CNTY,
         CLAIMS.HOSP_ADMT_DT,
         CLAIMS.HOSP_DSCHRG_DT,
         CLAIMS.CLM_LN_UNITS_NUM,
         CLAIMS.CLM_LN_CHRG_AMT,
         CLAIMS.CLM_LN_ALWD_AMT,
         CLAIMS.CLM_LN_PD_AMT,
         CLAIMS.TIN_TXT,
         CLAIMS.CLM_LN_SVC_FROM_DT,
         CLAIMS.CLM_LN_SVC_TO_DT
    From CLM_MED_DETL DRG5CLAIMS,
         CLM_MED_DETL CLAIMS    
   Where CLAIMS.MBR_ID = DRG5CLAIMS.MBR_ID
     And DRG5CLAIMS.SBMTD_DRG_CD = '005'
     And DRG5CLAIMS.CLM_LN_SVC_FROM_DT >= CLAIMS.HOSP_ADMT_DT - 30
     And DRG5CLAIMS.CLM_LN_SVC_FROM_DT <= CLAIMS.HOSP_DSCHRG_DT + 180
     And CLAIMS.CLM_SRC_CD = 'TRG_FA'
     And CLAIMS.CLM_LN_PD_AMT <> 0
     And CLAIMS.CLM_LN_CURR_STAT_TXT <> 91
Order By CLAIMS.MBR_LST_NAME Asc, CLAIMS.CLM_LN_SEQ_NUM Asc;