SQL分区实现“second_value”等

3

我正在计算客户的保留率,并希望根据客户在首次、第二次、第三次等购买行为进行分段。

例如:

using first_value(had_coupon) over (partition by customer_id order by order_date DESC) 

我可以通过在第一次购买时使用优惠券来进行分段,以影响客户保持。

我正在尝试找出如何在第二次和第三次购买中做同样的事情。 使用CASE语句,我可以为没有购买两次、三次或更多次的客户提供另一个值。

我一直在使用这个网站寻求帮助。


对于任何数据问题,您应该包括样本输入数据和预期结果。 - Error_2646
你能进一步解释你想要实现什么吗?提供一个小数据集、期望的结果以及你目前尝试过的方法会非常有帮助。 - larsen
嗨,我想根据客户在购买生命周期中使用优惠券的行为来对他们进行分段。 - oshrim
抱歉,我是新来的:嗨。 我想根据客户在购买生命周期中的优惠券使用行为对他们进行分组。 到目前为止,我已经使用了first_value来获取第一次购买,使用lead和lag函数来获取后续交易。 然而,我的期望分段结果在示例列G和H中:https://docs.google.com/spreadsheets/d/1Sf1lCkVOnFKQiKfHHDvvof2VDR8DECcK3Q-_MpsjScM/edit?usp=sharing - oshrim
1个回答

0

使用 row_number() 标记第一、第二、第三等等 + 使用 max()min() 进行分组聚合,以按客户/等进行分组:

select max(case when rn=1 then had_coupon end) first_order_had_coupon,
       max(case when rn=2 then had_coupon end) second_order_had_coupon, 
       -- and so on
       --other group columns
from  
(
select had_coupon,
       --other columns
      row_number() over (partition by customer_id order by order_date DESC) rn
  from table
)s
group by group columns

嘿,你的case语句会给所有在第一次、第二次等购买的客户返回True。此外,它应该是一个窗口函数,因为我想通过用户的优惠券行为对他们进行分段:第二次购买优惠券的用户必须在他们的第四个购买行中有一个"coupon in the second purchase"列的True值。 - oshrim
@oshrim 很难理解,请提供数据示例和期望的输出。 - leftjoin
这个样本数据集有助于理解我想要的结果吗?https://docs.google.com/spreadsheets/d/1Sf1lCkVOnFKQiKfHHDvvof2VDR8DECcK3Q-_MpsjScM/edit?usp=sharing - oshrim
@oshrim 请将其添加到问题中,也许会有人帮忙。我仍然不明白第二次购买出了什么问题。对于客户来说,第一次是01/11/2018,第二次是18/02/2018(第二个日期<第一个日期)。对于客户2,第二个日期>第一个日期。订单不同吗? - leftjoin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接