问题描述
这是给你的一个谜题......我已经用这个头撞墙了 2 天了。 :-) 帮助!!
背景:我的数据集有客户,每个事件有 1 行,开始和结束日期。
目标:我需要向某些事件添加 MAIN_EVENT 标志,如此处所示。 (“设置”列会很好,但不是明确必要的;解释如下。)
规则:“主赛事”是指在上一个“主赛事”结束后 30 天以上开始的任何赛事。
简单例子:如下图,《史密斯一号》结束于 01/09;由于“史密斯 2 和 3”在此后的 30 天内开始,它们不是“主要事件”。然而,“史密斯 4”确实在“史密斯 1”结束后 30 天后开始,因此需要标记为新的“主赛事”。我已经可以使用正在运行的 SUM() 解决这部分(即找到第二个“主事件”),但这就是问题的开始。
真正的问题:既然第 4 次“史密斯”事件已被标记为“主要事件”,我现在需要将未来事件与“史密斯 4”的 END_DATE 进行比较,而不是“史密斯 1”。 (例如,“史密斯 5”不是“主赛事”,因为它在“史密斯 4”结束后的 30 天内开始。
关于“设置”列:我在此处添加了“设置”列只是为了说明相关行,即标记了“主要事件”的位置以及在该 30 天窗口中开始的其余事件不是“主要的活动”。我没有明确需要这个,但拥有它可能会很好。
如果我的解释不是太混乱,我希望对于比我的 SQL 专业知识更好的人来说,这将是一个简单(而且有趣?)的谜题! :-) 附言我在 NETEZZA 数据库上运行它。
谢谢!!
CUST | SEQ | START_DATE | END_DATE | MAIN_EVENT | 设置 | 注意事项 |
---|---|---|---|---|---|---|
史密斯 | 1 | 2020-01-01 | 2020-01-09 | 1 | 1 | 主要活动,因为这是该客户的第一个活动。 |
史密斯 | 2 | 2020-01-16 | 2020-01-18 | 0 | 1 | 在上次主赛事结束后 30 天内开始,即在 2020-02-08 之前 |
史密斯 | 3 | 2020-01-28 | 2020-02-02 | 0 | 1 | 在上次主赛事结束后 30 天内开始,即在 2020-02-08 之前 |
史密斯 | 4 | 2020-02-23 | 2020-02-28 | 1 | 2 | 主要事件。在上次主赛事结束后>30 天开始,即在 2020-02-08 之后 |
史密斯 | 5 | 2020-03-09 | 2020-03-11 | 0 | 2 | 在上次主赛事结束后 30 天内开始,即在 2020-03-29 之前 |
史密斯 | 6 | 2020-05-10 | 2020-05-15 | 1 | 3 | 主要事件。在上次主赛事结束后>30 天开始,即在 2020-03-29 之后 |
史密斯 | 7 | 2020-08-13 | 2020-08-21 | 1 | 4 | 主要事件。在最后一次主赛事结束后>30 天开始,即在 2020-06-14 之后 |
史密斯 | 8 | 2020-08-26 | 2020-09-05 | 0 | 4 | 在上次主赛事结束后的 30 天内开始,即在 2020-09-20 之前 |
史密斯 | 9 | 2020-09-12 | 2020-10-02 | 0 | 4 | 在上次主赛事结束后的 30 天内开始,即在 2020-09-20 之前 |
琼斯 | 1 | 2020-01-15 | 2020-01-25 | 1 | 1 | 主要活动,因为这是该客户的第一个活动。 |
琼斯 | 2 | 2020-05-01 | 2020-05-06 | 1 | 2 | 主要事件。在上次主赛事结束后>30 天开始,即在 2020-02-24 之后 |
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)