google-sheets - Google 表格 - 使用过滤器作为序列的输入来查找唯一日期
问题描述
长期聆听者,第一次来电者....
对于几个人,我有多个开始和结束日期。所以像:
Name Start End
Sam 5/1 5/5
Bob 5/3 5/7
Sam 5/3 5/10
Ralph 5/7 5/12
Bob 5/7 5/12
Ralph 5/15 5/17
等等。每个人多达 13 个开始和结束日期条目。
我需要计算这些条目中的唯一日期。对于上面的 Sam,它将是 10: 5/1 - 5/10
。(实际上,我只需要9
- 我跳过 5/10。)对于 Bob 来说是5/3 - 5/12
这样10
,而 Ralph 是9
。
我可以FILTER
用来获取日期列表:
=FILTER(Sheet2!D:E,Sheet2!P:P,"=Sam")
有了开始(下面的列 A)和结束(下面的列 B)日期列表,我可以一次一行并生成一个唯一的日期数组(5/1、5/2、5 /3, 5/4, 5/5....5/10) 并计算唯一条目。Sequence 根据开始和结束日期生成数组中的每个日期;UNIQUE
清理重复项;COUNT
给我唯一日期的数量:
=COUNT(ArrayFormula(UNIQUE({SEQUENCE(B1-A1,1,A1);IF(A2>0,SEQUENCE(B2-A2,1,A2),"");IF(A3>0,SEQUENCE(B3-A3,1,A3),"");IF(A4>0,SEQUENCE(B4-A4,1,A4),"")})))
(为简洁起见,公式缩短 - 将是 13SEQUENCE
项。)
我不知道如何将其组合成一个公式,并将结果放在一个带有每个人姓名的表格旁边,这样我就可以计算出唯一日期。结果将是:
Sam 10
Bob 10
Ralph 9
关于下一步尝试的任何建议?也许SEQUENCE
是分析重叠日期的错误方法?
(虽然脚本会用数组中的 FOR EACH 来解决这个问题,但更喜欢公式。)
解决方案
我认为你是对的,序列是要走的路。
首先,如果没有差距,那是微不足道的,只是最大结束日期 - 最小开始日期:
maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2)
但是在存在间隔(如 Ralph)并且您不想计算它们的情况下,您可以使用 Sequence 生成跨越开始日期和结束日期的日期数组,然后使用 Countifs 检查每个日期是否落在在数据中的至少一对日期中:
=ArrayFormula(
countif(
countifs(A$2:A,E2,B$2:B,"<="&sequence(maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2),1,minifs(B$2:B,A$2:A,E2)),
C$2:C,">="&SEQUENCE(maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2),1,minifs(B$2:B,A$2:A,E2))),
">0")
)
编辑
上述公式与评论中提到的不一致,因为从 max 到 min 的范围不包含在内(省略范围中的最后一个日期),而单独的子范围(如 Ralph 的)包含在内。
非包含公式(省略最后日期):
=ArrayFormula(
countif(
countifs(A$2:A,E2,B$2:B,"<"&sequence(maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2)+1,1,minifs(B$2:B,A$2:A,E2)),
C$2:C,">="&SEQUENCE(maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2)+1,1,minifs(B$2:B,A$2:A,E2))),
">0"))
包含公式(包括最后日期)
=ArrayFormula(
countif(
countifs(A$2:A,E2,B$2:B,"<="&sequence(maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2)+1,1,minifs(B$2:B,A$2:A,E2)),
C$2:C,">="&SEQUENCE(maxifs(C$2:C,A$2:A,E2)-minifs(B$2:B,A$2:A,E2)+1,1,minifs(B$2:B,A$2:A,E2))),
">0"))
推荐阅读
- node.js - Express nodejs POST方法返回空括号
- php - Symfony/BrowserKit 返回 Dump 而不是 HTML
- c - 重复一段代码(不是在谈论循环)(C)
- html - 在不使用边距属性的情况下移动元素的任何方式
- c++ - 如何避免实体和地图之间的循环依赖?
- node.js - 客户端不会在 socketio 中发出事件
- spring - TomcatServer 在 100 个并发请求后挂起
- c++ - 矩阵形成中的奇怪行为(C++,犰狳)
- flutter - Flutter 中 Dismissible 中的 PageView 无法正常工作
- jquery - Mysql全外连接两个子查询