Excel 同一分类下进行跨行计算

例题描述

Excel 文件记录不同用户的事件发生时间,数据已按 USER ID 和 DATE 列排序,部分数据如下:


A B C
1 USER ID EVENT ID DATE
2 1 4 2020-01-01
3 1 5 2020-01-05
4 1 6 2020-01-13
5 2 7 2020-01-03
6 2 8 2020-01-05
7 2 9 2020-01-06

现在要计算事件真假列isTrue,规则是:同一个USER ID内,第1起事件一定为真,从第2起事件开始,如果与上一真事件的间隔大于等于10天,则该事件为真,其他事件均为假。结果应当如下:


A B C D
1 USER ID EVENT ID DATE isTrue
2 1 4 2020-01-01 1
3 1 5 2020-01-05 0
4 1 6 2020-01-13 1
5 2 7 2020-01-03 1
6 2 8 2020-01-05 0
7 2 9 2020-01-06 0

解法及简要说明

使用 Excel 插件 SPL XLL

在 D1 单元格写入公式:

=spl("=E(?).new(if('USER ID'!='USER ID'[-1],(t=DATE,1),if(DATE-t>=10,(t=DATE,1),0)):isTrue)",A1:C7)

如图:

..

简要说明:

如果本行的 USER ID 与上一行不同,则说明当前行是组内第 1 起事件,此时赋值 isTrue=1,同时临时变量 t= 本行 DATE。如果本行的 USER ID 与上一行相同,则进入组内计算,用临时变量和本行的日期计算间隔,大于等于 10 时赋值 isTrue=1,同时修改临时变量 t= 本行 DATE。

问答搜集

https://stackoverflow.com/questions/63838362/date-diff-between-many-rows-in-excel