我有一个表,客户ID,购买日期
我想看看是否有3个购买在5天的窗口期。
注:不需要连续
| 客户ID|购买日期|
| --|--|
| 11 |2023年11月9日|
| 11 |2023年11月13日|
| 11 |2023年11月15日|
| 11 |2023年11月21日|
| 11 |2023年11月23日|
| 11 |2023年11月24日|
| 12 |2023年11月16日|
| 12 |2023年11月21日|
| 12 |2023年11月25日|
| 12 |2023年12月1日|
| 12 |2023年12月03日|
| 12 |2023年12月5日|
将该表视为检查5天窗口中任意3天的输入。对于客户ID 11 ->
- DOP 9/11/2023 + 5天窗口期为14/11/2023
- 在检查它只有2天9/11/2023和13/11/2023,所以它失败了
- DOP 13/11/2023 + 5天窗口期为18/11/2023 -未通过(仅2条记录)
- DOP 15/11/2023 + 5天窗口期为20/11/2023 -未通过(仅1条记录)
*DOP 21/11/2023 + 5天窗口期为26/11/2023 - 在检查它有3天21/11/2023,23/11/2023和24/11/2023,所以它通过
在总体级别上- CustomerID 11通过了在5天窗口期内进行任何3天购买的条件
请让我知道如果问题或清楚。
1条答案
按热度按时间eit6fx6z1#
您可以从不同的Angular 来看待这个问题,以简化解决方案,对于每3次连续的购买,检查其中一次是否在5天的范围内,并且在按“Date O Purchase”(购买日期)排序数据后进一步简化,您只需要按该顺序检查当前行和当前行(这意味着最近3次购买)并检查这2行的日期是否在5天内,这里是PySpark中的解决方案:
字符串
编辑:
您可以通过将
lag("Date_Of_Purchase", 2)
中的2更改为购买次数-1,并将.filter(col("days_between") <= 5)
中的5更改为天数间隔窗口来概括这一点。