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

Excel批量处理:同一号码3分钟内仅保留1条通话记录需求

针对百万级Excel通话记录的去重方案(同一号码每3分钟仅留1条)

高效方案:Power Query(适配百万级数据)

百万级数据用公式容易卡顿,Power Query是更优选择,步骤如下:

  1. 选中含表头的数据区域,点击「数据」→「从表格/区域」,确认表头后进入编辑器。
  2. 按Number(号码)升序,再按Timestamp(时间戳)升序排序,确保同号码的记录按时间排列。
  3. 分组处理同号码记录:
    • 点击「转换」→「分组依据」,设置:
      • 分组依据:Number
      • 新列名:RecordList
      • 操作:所有行
    • 添加自定义列,筛选出需要保留的记录:
      点击「添加列」→「自定义列」,输入以下M语言公式:
      = List.Accumulate([RecordList], {}, (accumulator, current) =>
          if List.IsEmpty(accumulator) then {current}
          else if Duration.TotalMinutes(current[Timestamp] - List.Last(accumulator)[Timestamp]) >= 3 then accumulator & {current}
          else accumulator
        )
      
  4. 展开自定义列:点击自定义列右侧的箭头,选择「展开到新行」,移除多余列后,点击「关闭并上载」即可得到结果。

公式方案(适合中小数据量或Excel 365动态数组)

先按Number和Timestamp升序排序,假设数据在A2:B1000000:

  • 普通Excel版本:在C2输入公式,下拉填充后筛选TRUE的行:
    =IF(B2<>B1,TRUE,DATEDIF(A1,A2,"m")>=3)
    
  • Excel 365及以上(动态数组):直接输入以下公式,自动返回去重后的结果:
    =LET(
        sortedData,SORT(A2:B1000000,{2,1},1),
        numbers,INDEX(sortedData,,2),
        timestamps,INDEX(sortedData,,1),
        prevNumbers,VSTACK("",numbers),
        prevTimestamps,VSTACK(0,timestamps),
        keepFlag,IF(numbers<>prevNumbers,TRUE,DATEDIF(prevTimestamps,timestamps,"m")>=3),
        FILTER(sortedData,keepFlag)
    )
    

关键说明

你之前的固定时段划分思路不符合需求,因为规则是同一号码的任意连续3分钟窗口内仅保留1条,而非固定的3分钟区间(比如0-3分、3-6分)。上述方案都是基于同号码的时间序列,判断当前记录与上一条保留记录的时间差是否≥3分钟,从而实现需求。

内容的提问来源于stack exchange,提问作者Rex Caesar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:12:06