每个ID,每个保单编号和日期获得1行

时间:2018-12-04 01:29:51

标签: mysql

我正在尝试获取具有不同政策编号以及有效日期和取消日期的会员ID。我无法在策略编号相同但在保险范围或取消日期字段中没有日期的查询中删除多余的行。我环顾四周,没有发现附近的任何东西。如果找不到正确的方法,我很容易错过它。 这是我试图用来隔离出来的代码。我返回3行,只需要其中2行。我需要能够知道他们是现在还是过去随时更改了政策编号。

代码:

    select pp.member_id
    , pp.id as people_id
    , po.id as policy_id
    , po.person_id
    , po.client_id
    , po.policy_number
    , po.cov_dt
    , po.cancl_dt
    from people pp 
     left join policies po
      on pp.id = po.person_id;

尝试将结果隔离到单个策略。当然,它只返回1行,并且两个日期的最大日期都小于1个保单号,这是错误的。 代码:

    select pp.member_id
    , cte1.policy_number
    , cte1.person_id
    , cte1.max_eff_date
    , cte1.max_cancel_date
    from people pp 
     left join (select  p.person_id, p.client_id, p.policy_number
                , max(p.cov_dt) as max_eff_date
                , max(p.cancl_dt) as max_cancel_date
                from policies p
                /*where p.person_id =52545*/
               ) cte1 ON pp.id = cte1.person_id ;

第一个代码的结果:

member_id people_id policy_id person_id client_id pol_nbr cov_dt cancl_dt 
29D993E95 52545     58482     52545     59        904871  null   1/21/16
29D993E95 52545     58487     52545     59        904871 1/21/16 3/16/17 
29D993E95 52545     224370    52545     34434     909055 4/3/17     null

第二个查询的结果:我将其缩短以使结果集重新显示

member_id people_id policy_number client_id cov_dt cancl_dt
29D993E95 52545     904871        52545     4/3/17  3/16/17 

感谢您的帮助。

我忘记添加我想要获得的结果集。猜猜这就是为什么我被否决。我确实像他们说的那样对代码块进行缩进。但是它永远不会接受。

结果应为: member_id people_id policy_id person_id client_id pol_nbr cov_dt cancl_dt 29D993E95 52545 58487 52545 59 904871 1/21/16 3/16/17 29D993E95 52545 224370 52545 34434 909055 4/3/17空

1 个答案:

答案 0 :(得分:0)

我能够通过做显而易见的事情来解决这个问题。不能相信这使我对如何做到这一点置若mind闻。基本上我在子查询中有很多字段。将其减少为policy_number和date字段。问题解决了。

仅用于子查询的代码:

     SELECT p.person_id, p.policy_number
        , MAX(p.coverage_effective_date) AS max_coverage_effective_date
        , MAX(p.coverage_cancel_date)    AS max_coverage_cancel_date
        FROM policies p     
     GROUP BY p.person_id, p.policy_number

这会在原始查询的总查询中产生期望的结果: member_id people_id policy_id person_id client_id pol_nbr cov_dt cancl_dt 29D993E95 52545 58487 52545 59 904871 1/21/16 3/16/17 29D993E95 52545 224370 52545 34434 909055 4/3/17空