选择活动策略

时间:2019-09-26 18:05:03

标签: sql apache-spark-sql pyspark-sql

我有一个连接两个表的简单查询,如下所示:

select
p.policy_id, c.cust_name
from policies p
inner join customers c
on p.policy_id = c.policy_id

但是,我只需要对存储在另一个表中的“ Active”(即is_Closed = 'N')策略执行上述查询-

合同:

policy_id | is_Closed
12345 | N
12345 | N
71567 | N
71567 | N
12345 | Y

但是,在上面的合同表中,我们看到policy_id 12345,尽管它有2条记录,其中'N'(即Active),但仍然有1条记录'Y',使其与Closed相同。对于给定的policy_id,如果甚至有一个'Y'记录,则无论该策略是否还有其他Closed/Inactive记录(即{{1 }}),因此不应在输出中考虑。
另一方面,策略'N'拥有2条记录,两者均为Active,即均为71567,因此应在查询中考虑。

我尝试了类似以下查询的操作来忽略'N'(即Active)策略-

'Closed'

但是很遗憾,此查询需要很长时间才能完成合同表中的'Y'条记录。 有没有更聪明的方法来实现这种逻辑,以便可以更高效地执行?

谢谢。

1 个答案:

答案 0 :(得分:0)

尝试预汇总contracts表:

select p.policy_id, c.cust_name
from policies p inner join
     customers c
     on p.policy_id = c.policy_id left join
     (select distinct policy_id
      from contract
      where is_Closed = 'Y'
     ) cy
     on p.policy_id cy.policy_id
where cy.policy_id is null;