对这个查询和一些提示/建议感到有点头疼,我们将不胜感激。我找不到与我的问题真正相关的任何东西 - 我在传递闭包上发现了一些东西,这不是我所需要的,因为我的数据可能会创建一个循环/循环,我认为这会导致递归调用无限循环.
假设我有两个基本表格,其下方显示数据。完全披露:Memberships表是一个 CTE,它已经做了相当多的逻辑来计算CServiceDate列的值。Transfers表是一个实际的表,除了 PK 和FromMembershipID和ToMembershipID关系之外不包含很多 内容。
会员资格
+==========+===============+================+====== =========+ | 个人ID | 会员ID | 会员日期 | 服务日期 | +==========+===============+================+====== =========+ | 1 | 15 | 2016 年 8 月 1 日 | 2017 年 8 月 27 日 | +----------+--------------+----------------+------ --------+ | 1 | 16 | 2016 年 3 月 25 日 | 2000 年 9 月 1 日 | +----------+--------------+----------------+------ --------+ | 1 | 17 | 2011 年 12 月 6 日 | 1995 年 5 月 15 日 | +----------+--------------+----------------+------ --------+ | 1 | 18 | 2009 年 1 月 12 日 | 1998 年 2 月 28 日 | +----------+--------------+----------------+------ --------+ | 1 | 19 | 2016 年 4 月 8 日 | 1994 年 7 月 10 日 | +----------+--------------+----------------+------ --------+ | 1 | 20 | 2010 年 6 月 11 日 | 1997 年 11 月 12 日 | +----------+--------------+----------------+------ --------+
转移
+=====+=====+===================+================+ | 时间 | PID | FromMembershipID | ToMembershipID | +=====+=====+===================+================+ | 1 | 1 | 16 | 15 | +-----+-----+------------------+----------------+ | 2 | 1 | 18 | 17 | +-----+-----+------------------+----------------+ | 3 | 1 | 19 | 17 | +-----+-----+------------------+----------------+ | 4 | 1 | 20 | 18 | +-----+-----+------------------+----------------+ | 5 | 1 | 20 | 19 | +-----+-----+------------------+----------------+
问题 我需要从查询中获取 Memberships CTE 中的每一行(即每个 MembershipID),我想返回所有相关 MembershipID 的 MIN CServiceDate。我将此 MIN 值称为 ECSD(预期信用服务日期)。ECSD的计算只有两个条件:
- 如果通过查看 FromMembershipID 和 ToMembershipID 列,通过Transfers表以某种方式将成员资格记录与当前 MembershipID 关联,则该成员资格记录被视为与当前 MembershipID“相关”。例如,对于 MembershipID 20,如果我们查看Transfers表,我们可以看到 MembershipIDs 20、19、18 和 17 都是通过传递性相关的(此外:通过Transfers表,我们可以看到 MembershipIDs 15 和 16 与彼此,但不是 [20,19,18,17] )
- 在上面直接派生的可传递相关成员列表中,在计算 ECSD 时可在传递关系列表中考虑的唯一成员是 MembershipDate 早于当前 MembershipID 的成员。例如,基于给定 MembershipID 的 MembershipDates 和Transfers表,如果查看 MembershipID 17,则在计算 MembershiID 17 的 ECSD 时不能考虑 MembershipID 19,因为 MembershipID 19 的 MembershipDate(2016 年 4 月 8 日)不早于MembershipID 17's (Dec-06-2011)
ECSD 列的预期输出
+==========+===============+================+====== ========+==============+ | 个人ID | 会员ID | 会员日期 | 服务日期 | 教育发展署 | +==========+===============+================+====== ========+==============+ | 1 | 15 | 2016 年 8 月 1 日 | 2017 年 8 月 27 日 | 2000 年 9 月 1 日 | +----------+--------------+----------------+------ --------+-------------+ | 1 | 16 | 2016 年 3 月 25 日 | 2000 年 9 月 1 日 | 2000 年 9 月 1 日 | +----------+--------------+----------------+------ --------+-------------+ | 1 | 17 | 2011 年 12 月 6 日 | 1995 年 5 月 15 日 | 1995 年 5 月 15 日 | +----------+--------------+----------------+------ --------+-------------+ | 1 | 18 | 2009 年 1 月 12 日 | 1998 年 2 月 28 日 | 1998 年 2 月 28 日 | +----------+--------------+----------------+------ --------+-------------+ | 1 | 19 | 2016 年 4 月 8 日 | 1994 年 7 月 10 日 | 1994 年 7 月 10 日 | +----------+--------------+----------------+------ --------+-------------+ | 1 | 20 | 2010 年 6 月 11 日 | 1997 年 11 月 12 日 | 1997 年 11 月 12 日 | +----------+--------------+----------------+------ --------+-------------+
请注意:
- MembershipID 可以在 FromMembershipID 和 ToMembershipID 列中显示多次。这些列值不必是唯一的。
- 上面提供的表格是简单的关系。成员资格/转移可以低至 1 层深度(即 1 次转移)到 N 层深度,其中转移(如果仅查看 From/ToMembershipID)可以创建循环循环。下面是一个传输关系更深的例子。
- 可能需要注意的是,如果 TOMembershipID 列中不存在 MembershipID,则该 MembershipID 是最早的(可能有多个)。类似地,如果 FromMembershipID 列中不存在 MembershipID,则它是结束的和最新的成员资格。
- 对于给定的人,可能存在将某些成员资格联系在一起的块或转移集,但不是全部。
示例 2
会员资格
+==========+===============+================+====== =========+ | 人物 | 会员ID | 会员日期 | 服务日期 | +==========+===============+================+====== =========+ | 499510 | 548426 | 2014-09-29 | 2014-09-29 | +----------+--------------+----------------+------ --------+ | 499510 | 548428 | 2014-01-29 | 2014-01-29 | +----------+--------------+----------------+------ --------+ | 499510 | 548425 | 2012-05-28 | 2012-05-28 | +----------+--------------+----------------+------ --------+ | 499510 | 548429 | 2011-11-23 | 2011-11-23 | +----------+--------------+----------------+------ --------+ | 499510 | 548427 | 2008-07-03 | 2008-07-03 | +----------+--------------+----------------+------ --------+ | 499510 | 548431 | 2001-05-01 | 1976-01-01 | +----------+--------------+----------------+------ --------+ | 499510 | 548430 | 1998-10-08 | 1998-10-08 | +----------+--------------+----------------+------ --------+
转移
+=======+=========+==================+============= ===+ | 时间 | 进程号 | FromMembershipID | ToMembershipID | +=======+=========+==================+============= ===+ | 10664 | 499510 | 548430 | 548431 | +-------+--------+------------------+------------- ---+ | 10665 | 499510 | 548431 | 548427 | +-------+--------+------------------+------------- ---+ | 10666 | 499510 | 548427 | 548429 | +-------+--------+------------------+------------- ---+ | 10667 | 499510 | 548429 | 548425 | +-------+--------+------------------+------------- ---+ | 10668 | 499510 | 548425 | 548428 | +-------+--------+------------------+------------- ---+ | 10669 | 499510 | 548428 | 548426 | +-------+--------+------------------+------------- ---+ | 13085 | 499510 | 548430 | 548427 | +-------+--------+------------------+------------- ---+ | 13086 | 499510 | 548427 | 548425 | +-------+--------+------------------+------------- ---+ | 13087 | 499510 | 548425 | 548426 | +-------+--------+------------------+------------- ---+ | 13088 | 499510 | 548431 | 548429 | +-------+--------+------------------+------------- ---+ | 13089 | 499510 | 548429 | 548428 | +-------+--------+------------------+------------- ---+
预期结果
+==========+===============+================+====== ========+=============+ | 人物 | 会员ID | 会员日期 | 服务日期 | 教育发展署 | +==========+===============+================+====== ========+=============+ | 499510 | 548426 | 2014-09-29 | 2014-09-29 | 1976-01-01 | +----------+--------------+----------------+------ --------+------------+ | 499510 | 548428 | 2014-01-29 | 2014-01-29 | 1976-01-01 | +----------+--------------+----------------+------ --------+------------+ | 499510 | 548425 | 2012-05-28 | 2012-05-28 | 1976-01-01 | +----------+--------------+----------------+------ --------+------------+ | 499510 | 548429 | 2011-11-23 | 2011-11-23 | 1976-01-01 | +----------+--------------+----------------+------ --------+------------+ | 499510 | 548427 | 2008-07-03 | 2008-07-03 | 1976-01-01 | +----------+--------------+----------------+------ --------+------------+ | 499510 | 548431 | 2001-05-01 | 1976-01-01 | 1976-01-01 | +----------+--------------+----------------+------ --------+------------+ | 499510 | 548430 | 1998-10-08 | 1998-10-08 | 1998-10-08 | +----------+--------------+----------------+------ --------+------------+
谢谢!