SQL Puzzle with Dynamic LAG 和/或重置累积 SUM

问题描述

这是给你的一个谜题......我已经用这个头撞墙了 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...