根据日期跨度提取记录

时间:2017-11-14 04:39:44

标签: sql sql-server tsql inner-join

我有2张MEMBEN和MEMELIG表,数据如下。

会员详情: enter image description here

MEMELIG详细信息:

enter image description here

我希望以这样的方式加入两个表格,即它不提供笛卡尔积,而是根据利益效率和利益结束日期的日期选择性数据,因此请考虑上面的例子我们采用id =' 1001& #39;,

下面的图片包含我正在寻找的所有细节。

预期结果详情

enter image description here

请帮助我尝试使用WITH子句但无法继续处理结果。

1 个答案:

答案 0 :(得分:0)

在查看示例数据时,您似乎正在寻找类似下面的内容。

SELECT m1.member_id
    ,lis_eff_dt
    ,lis_end_dt
    ,benefit_eff_dt
    ,benefit_end_dt
FROM memben m1
INNER JOIN memlig m2 ON m1.member_id = m2.member_id
    AND m1.member_id = '1001'
    AND m1.lis_eff_dt >= m2.benefit_eff_dt
    AND m1.lis_end_dt <= m2.benefit_end_dt;

cte版本可以是。

WITH cte (
    member_id
    ,lis_eff_dt
    ,lis_end_dt
    ,benefit_eff_dt
    ,benefit_end_dt
    )
AS (
    SELECT m1.member_id
        ,lis_eff_dt
        ,lis_end_dt
        ,benefit_eff_dt
        ,benefit_end_dt
    FROM memben m1
    INNER JOIN memlig m2 ON m1.member_id = m2.member_id
        AND m1.member_id = '1001'
        AND m1.lis_eff_dt >= m2.benefit_eff_dt
        AND m1.lis_end_dt <= m2.benefit_end_dt
    )
SELECT *
FROM cte;

您可以查看演示 here