创建一个根据配置单元中的订单日期更新的标志

8xiog9wr  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(331)

我想创建一个标志列“order\u type”,它将根据日期差异进行更新。如下面所附的输入和输出数据示例,我的要求是,如果消费者在最后一次购买12个月后进行了购买,则应将其再次计算为首次购买。
在下面输入数据-

-----------------------------------------
|customer_id|   order_id    |order_date|
-----------------------------------------
|1234       |   1           |2017-07-06|
|1234       |   2           |2018-09-17|
|1234       |   3           |2018-09-20|
|1234       |   4           |2019-05-16|
|1234       |   5           |2020-09-15|
|-----------|---------------|----------|

输出数据

--------------------------------------------------------|
|customer_id|   order_id    |order_date| order_type     |
--------------------------------------------------------|
|1234       |   1           |2017-07-06| First purchase |
|1234       |   2           |2018-09-17| First purchase |
|1234       |   3           |2018-09-20| Second purchase|
|1234       |   4           |2019-05-16| Second plus purchase
|1234       |   5           |2020-09-15| First purchase |
|-----------|---------------|----------|----------------|

i、 e.第一次采购-2017-07-06-第一次采购(第二次采购)-2018-09-17(第一次和第二次采购的日期差异超过12个月)-第二次采购(第三次采购)-2018-09-20(第二次和第三次采购的日期差异少于12个月)-第二次加采购(第四次采购)-2019-05-16(自第三次和第四次订单之间的日期差异少于12个月期限)-首次购买(最后一次购买)-2020-09-15(自12个月以来)

o7jaxewo

o7jaxewo1#

使用 lag() 获取上一个 order_date . 然后用累加和来定义组和 row_number() 列举:

select t.*,
       row_number() over (partition by customer_id, grp order by order_date) as order_type
from (select t.*,
             sum(case when prev_order_date > add_months(order_date, -12)
                      then 0 else 1
                 end) over (partition by customer_id order by order_date) as grp
      from (select t.*,
                   lag(order_date) over (partition by customer_id order by order_date) as prev_order_date
            from t
           ) t
      ) t;

这只是将订单类型显示为数字,而不是转换为英语短语。

相关问题