小编Lex*_*ton的帖子

递归加入以获得跨度

我对在 SQL 中工作很陌生,并且有一个差距和孤岛问题,我正试图获得一系列连续几个月的会员资格。任何成员都可能有多个成员资格,并且他们的成员资格可能存在差距或重叠。我的想法是按成员订购会员资格,并按月在该组内计划和反向工作,直到找到差距,然后指定会员资格的开始和结束日期。

这是我的数据样本:

Member  YYYYMM      Plan
1       201601      123
1       201602      123
2       201505      123
2       201506      123
2       201510      123
2       201511      123
2       201512      123
1       201510      456
1       201511      456
1       201512      456
1       201601      456
Run Code Online (Sandbox Code Playgroud)

上述数据将代表两个独立会员在不同时间跨度的相同/不同计划的会员资格。现在,我需要让它看起来更像这样:

Member  YYYYMM_Begin    YYYYMM_End    Plan
1       201601          201602        123
2       201505          201506        123
2       201510          201512        123
1       201510          201601        456
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有一个递归连接,它基于成员和计划进行分区,并按 YYYYMM 降序排列它们,这似乎有效。但是我一直在思考如何确定连续几个月的会员资格的开始和结束日期。

SELECT DISTINCT A.Member, A.Plan, A.YYYYMM, B.Rank
FROM Member_Hist A
 JOIN (SELECT 
    MH.Member,
    MH.Plan,
    MH.YYYYMM,
RANK() OVER …
Run Code Online (Sandbox Code Playgroud)

oracle gaps-and-islands

5
推荐指数
1
解决办法
217
查看次数

标签 统计

gaps-and-islands ×1

oracle ×1