我正在尝试获取具有不同政策编号以及有效日期和取消日期的会员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空
答案 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空