我想知道我的联接是否返回所有需要的数据

时间:2019-01-23 20:28:32

标签: sql logic inner-join

我的数据

首先,我有一个成员资格表,该成员资格表告知成员何时加入,何时关闭帐户,还有与之相关的唯一ID。

接下来,我有一个索赔表。该表具有唯一的会员ID,索赔成本,服务日期。

现在达到我想要的结果。 如果某个时间段内某人是会员,那么我希望在一个时间段内将所有索赔汇总在一起。

我的过程

我要做的第一件事是创建一个具有两列的新成员资格表。第一列是会员ID。第二列是他们成为会员的每个月.....因此,如果某人是2017年全年的会员,则该会员ID将有12行(201701、201702等)。

我接下来要做的是获取一个中间索赔表。该索赔表与我提到的第一个索赔表几乎相同。唯一的区别是,我使用与EXTRACT(YEAR FROM)串联的EXTRACT(MONTH FROM service_date)将日期转换为(201701,201702等)日期格式。我有一些WHERE条件,但它们与我的问题无关。

我要做的最后一件事是获得最终索赔表-我想要的结果。这就是我的问题所在。我INNER JOIN中间索赔表,其成员资格表为member_ID = member_id,membership_date = service_date。该表将所有索赔汇总成比按成员密钥更为汇总的形式。有了这种逻辑,我的代码能否获得所有主张?恐怕我一无所获,因为我正在加入成员密钥和月份(201701),如果一个人一个月内有两个索偿要求,也许还没有得到什么。

例如,将1/5/17和1/9/17的索赔都转换为201701。

所有这些步骤都是必需的,因为我必须在最后一步连接到另一个表。但这不值得一提,因为它无关紧要。

会员表

    member_ID    start_membership    end_membership
    64321313245  01/01/2019          12/31/9999
    45623467234  03/03/2017          12/31/9999

索赔表

   member_ID    svc_date    cost
   45623467234  04/03/2017  100
   45623467234  04/05/2017  50

然后,理想情况下,我的索赔表中的两个索赔都将显示在SUM(cost)中。我不确定我的联接是否可以这样做。

基本上,我要问的是,如果要联接的两个键不一定唯一,那么联接会获取所有数据吗?

1 个答案:

答案 0 :(得分:0)

按照您的意思,它将按照您期望的方式运行,返回所有子行。本质上,它与执行操作相同:

    SELECT *
    FROM   claims 
    WHERE  member_ID = 45623467234 
    AND    CONCAT(EXTRACT(YEAR FROM ),'/',EXTRACT(MONTH FROM service_date)) = '201704'

将返回2行。