如何获取每位客户的第二笔订单日期并计算首单与二单时间差
如何获取每位客户的第二笔订单日期
嘿,我来帮你搞定这个问题!结合你已经整理好的唯一客户ID列表和首笔订单日期,下面给你两种实用方案,适配不同的数据规模:
方法一:Excel函数组合(适合中小数据集)
先明确一下假设的表结构(你可以根据自己的实际表名、列位置调整):
- 全量订单数据在名为
订单表的工作表,其中A列是客户ID,B列是订单日期 - 你的唯一客户ID列表在名为
客户表的工作表,A列是客户ID,B列是已经获取到的首笔订单日期,我们要在C列计算第二笔订单日期
适用所有Excel版本的公式
在客户表的C2单元格输入以下公式,然后下拉填充即可:
=AGGREGATE(15,6,订单表!$B$2:$B$1000/((订单表!$A$2:$A$1000=A2)*(订单表!$B$2:$B$1000>B2)),1)
公式拆解:
AGGREGATE(15,6,...):15代表调用「取第n小值」的逻辑,6表示自动忽略计算过程中的错误值- 分母部分
(订单表!$A$2:$A$1000=A2)*(订单表!$B$2:$B$1000>B2):筛选出当前客户ID且订单日期晚于首单的所有记录,不符合条件的会返回0,导致整个分式变成错误值,被AGGREGATE忽略 - 最后的
1:取筛选后日期里最小的那个,也就是该客户的第二笔订单日期
适合Excel 365/2021的简化公式
如果你的Excel支持动态数组,用XSMALL+FILTER组合更直观:
=XSMALL(FILTER(订单表!$B:$B,(订单表!$A:$A=A2)*(订单表!$B:$B>B2)),1)
逻辑很简单:先用FILTER筛出当前客户所有晚于首单的订单日期,再用XSMALL取其中最小的那个(也就是第二笔订单)
方法二:Power Query(适合大数据集,自动化处理)
如果你的订单数据量很大,用函数会卡顿,Power Query是更高效的选择:
- 将
订单表和客户表都导入Power Query(点击「数据」选项卡 > 「自表格/区域」) - 处理
订单表:- 点击「转换」选项卡 > 「分组依据」,分组列选
客户ID - 新增列名设为
第二单日期,操作选择「自定义」,输入公式:
公式解释:先把该客户的所有订单日期排序,跳过第一个(首单),然后取剩下的第一个值,就是第二笔订单日期List.Skip(List.Sort([订单日期]),1){0}
- 点击「转换」选项卡 > 「分组依据」,分组列选
- 合并查询:回到
客户表的Power Query编辑器,点击「合并查询」,选择刚才处理好的订单表,匹配列选客户ID,把第二单日期列合并过来 - 点击「关闭并上载」,结果就会同步到Excel表格里
额外优化
如果存在只有1笔订单的客户,公式会返回错误值,你可以用IFERROR包装处理,比如:
=IFERROR(XSMALL(FILTER(订单表!$B:$B,(订单表!$A:$A=A2)*(订单表!$B:$B>B2)),1),"无第二笔订单")
内容的提问来源于stack exchange,提问作者Ted Glasnow
相关产品推荐
相关产品推荐

