如何在Google表格中构建公式判断派对宾客当前在场状态
派对宾客在场状态追踪公式(Google Sheets)
核心逻辑
判断宾客当前是否在场,关键看该宾客最后一次到达的时间是否晚于最后一次离开的时间——如果只有到达记录、或者最后一次动作是到达,就判定为当前在场。
方案1:FILTER + MAXIFS 组合公式
在Presence工作表的空白单元格(比如A2)输入以下公式,直接输出当前在场的宾客列表:
=FILTER(UNIQUE(Activity!B:B), MAXIFS(Activity!A:A, Activity!B:B, UNIQUE(Activity!B:B), Activity!C:C, "Arrived") > MAXIFS(Activity!A:A, Activity!B:B, UNIQUE(Activity!B:B), Activity!C:C, "Departed"), MAXIFS(Activity!A:A, Activity!B:B, UNIQUE(Activity!B:B), Activity!C:C, "Arrived") <> "")
公式拆解:
UNIQUE(Activity!B:B):提取所有出现过的宾客姓名,避免重复计算MAXIFS(Activity!A:A, ..., "Arrived"):获取每个宾客最后一次到达的时间MAXIFS(Activity!A:A, ..., "Departed"):获取每个宾客最后一次离开的时间- 第一个条件
>:筛选出最后到达时间晚于离开时间的宾客(若宾客无离开记录,MAXIFS返回0,此时到达时间必然大于0) - 第二个条件
<> "":过滤掉从未有过到达记录的无效条目
方案2:QUERY函数简化写法
如果习惯用QUERY语法,也可以用以下公式实现相同效果:
=QUERY(Activity!A:C, "SELECT B WHERE MAX(A) GROUP BY B HAVING MAX(A) FILTER (C='Arrived') > MAX(A) FILTER (C='Departed') OR MAX(A) FILTER (C='Departed') IS NULL", 1)
公式说明:
- 按宾客姓名(B列)分组,计算每组的最新时间
- 筛选条件:最后到达时间晚于最后离开时间,或者根本没有离开记录
- 末尾的
1表示Activity表的第一行是表头,自动忽略表头行
示例验证
针对你提到的场景:
- John有多次到达/离开记录,只要最后一次到达时间晚于9:30pm之前的离开时间,就会被判定为在场
- Suzy只有到达记录,无离开记录,会被直接纳入在场列表
内容的提问来源于stack exchange,提问作者Peter Bentley
相关产品推荐
相关产品推荐

