You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨多日期精确到秒的重叠时间段并发次数统计需求

需求说明

我有如下结构的时间区间数据(示例1):

StartEnd
18/11/2022 15:09:3918/11/2022 15:09:54
18/11/2022 15:09:1018/11/2022 15:09:24

需要精确到秒统计重叠时间段的并发次数,并且要统计每组独立重叠区间的最高并发数。比如下面的示例2数据:

StartEnd
18/11/2022 14:57:0918/11/2022 15:07:15
18/11/2022 15:06:0218/11/2022 15:07:07
18/11/2022 15:03:1018/11/2022 15:03:26
18/11/2022 15:02:5218/11/2022 15:03:05
18/11/2022 14:58:3118/11/2022 14:58:44
18/11/2022 14:27:5018/11/2022 14:56:38
18/11/2022 14:52:2118/11/2022 14:54:11

前5行的时间段互相重叠,最高并发数为5;最后2行的时间段互相重叠但不与前5行重叠,需单独统计为一组,最高并发数为2。同时数据涉及多日期,解决方案必须支持跨日期场景(示例3数据如下):

StartEnd
18/11/2022 9:59:2718/11/2022 10:00:07
18/11/2022 9:49:5118/11/2022 9:53:21
18/11/2022 9:38:1618/11/2022 9:46:59
18/11/2022 9:45:3718/11/2022 9:45:45
18/11/2022 9:41:4418/11/2022 9:42:14
18/11/2022 8:34:0118/11/2022 8:34:44
18/11/2022 8:11:4618/11/2022 8:13:58
18/11/2022 8:08:4618/11/2022 8:09:41
17/11/2022 19:18:4717/11/2022 19:18:54
17/11/2022 18:50:4917/11/2022 18:51:11
17/11/2022 17:40:2017/11/2022 17:40:45
17/11/2022 17:00:0417/11/2022 17:03:48
17/11/2022 16:58:3517/11/2022 16:58:50
17/11/2022 16:54:3117/11/2022 16:57:55
17/11/2022 16:34:0117/11/2022 16:34:29
17/11/2022 16:32:3017/11/2022 16:33:31
17/11/2022 16:28:2317/11/2022 16:32:59
17/11/2022 16:30:3817/11/2022 16:30:57
17/11/2022 16:22:1017/11/2022 16:22:27
17/11/2022 15:51:3617/11/2022 15:51:48
17/11/2022 15:48:1017/11/2022 15:48:49
17/11/2022 15:40:2217/11/2022 15:40:46
17/11/2022 15:30:3217/11/2022 15:36:44
17/11/2022 15:33:1117/11/2022 15:34:30
17/11/2022 15:32:0517/11/2022 15:33:14
17/11/2022 15:23:2717/11/2022 15:32:31

之前尝试过的方案仅支持天级精度,无法满足秒级统计需求。


方案一:Excel动态数组公式(适合Excel 365/2021)

步骤1:提取并排序所有时间节点

假设你的Start时间在A列,End时间在B列,找个空白单元格(比如D2)输入下面的公式,它会把所有开始、结束时间提取出来,去重后按时间排序:

=SORT(UNIQUE(VSTACK(A2:A27,B2:B27)))

把A2:A27、B2:B27换成你实际的数据范围就行

步骤2:计算每个时间点的并发数

在E2单元格输入这个公式,逐个计算每个时间节点上有多少个时间段在运行:

=BYROW(D2:D53,LAMBDA(x,SUM(--(A2:A27<=x)*(B2:B27>x))))

D2:D53是步骤1生成的时间节点范围,记得同步替换A/B列的范围

步骤3:分组统计每个重叠区间的最高并发

先在F2输入这个公式,给每个时间节点标记所属的区间组:

=SCAN(0,E2:E53,LAMBDA(a,b,IF(b=0,a,a+(b<>INDEX(E2:E53,MAX(1,ROW()-1))))))

然后在G2输入这个,生成每个组对应的并发数:

=UNIQUE(HSTACK(F2:F53,E2:E53))

最后用PIVOTBY函数直接算出每个组的最高并发:

=PIVOTBY(F2:F53,E2:E53,E2:E53,MAX,,0)

方案二:Power Query(大数据量更高效)

如果数据量较大,用Power Query处理更稳定:

步骤1:导入数据到Power Query

选中你的数据区域,点击数据选项卡 -> 从表格/区域,进入Power Query编辑器,先把Start和End列的类型改成日期/时间。

步骤2:生成时间节点与并发数

  1. 添加自定义列,命名为事件,公式:
{{"开始", [Start]}, {"结束", [End]}}
  1. 点击事件列右侧的展开按钮,将其拆分为新行。
  2. 把展开后的两列重命名为事件类型和时间点,然后按时间点排序。
  3. 添加自定义列并发数,公式:
List.Sum(List.Transform(Table.Range(#"排序的行",0,Index.Position()), (row) => if row[事件类型] = "开始" then 1 else -1))

步骤3:分组统计最高并发

  1. 添加自定义列区间组,公式:
List.Accumulate(List.Range(#"添加自定义"[并发数],0,Index.Position()), 0, (state, current) => if current = 0 then state else state + (current <> List.Range(#"添加自定义"[并发数],0,Index.Position()-1){Index.Position()-1}?))
  1. 筛选掉并发数为0的行(这些是区间之间的分隔点)。
  2. 点击转换选项卡 -> 分组依据,分组列选区间组,新列名设为最高并发,操作选最大值,列选并发数。
  3. 点击关闭并上载,即可得到每个独立重叠区间的最高并发次数。

内容的提问来源于stack exchange,提问作者Michael Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:31:34