Excel表格去重技术问询:按时间区间保留最早/最新数据
Excel按时间区间差异化去重(分区间保留最早/最新更新日期)
需求很明确:同一数据集里,第一个时间区间内按date+amount去重,只留update_date最早的行;第二个时间区间同样按这两列去重,但留update_date最新的行。之前用where date between...没成功,是因为只拆分了数据,没结合分组取最值的逻辑,给你两种可行方案:
方案1:Power Query实现(首选,大数据量也能扛)
- 选数据里任意单元格,点「数据」→「从表格/区域」,导入Power Query(记得勾选“我的表格有标题”)。
- 加自定义列区分区间:
点「添加列」→「自定义列」,输入公式(把日期改成你的实际区间分界):
如果你的日期是文本格式,直接写if [date] <= #date(2023,1,5) then "区间1" else "区间2"[date] <= "01-05-2023"也行,但转成日期类型更稳妥。 - 分组取最值:
点「转换」→「分组依据」,设置:- 分组列:
date、amount、「刚才添加的自定义列」 - 新列名:
目标日期 - 操作选「自定义」,公式写:
if [自定义列] = "区间1" then List.Min([update_date]) else List.Max([update_date])
- 分组列:
- 匹配原表取完整行:
点「添加列」→「合并查询」,把分组后的表和原表按date、amount、自定义列、目标日期这四列匹配,展开后保留你需要的三列即可。 - 删除重复项:选中
date、amount、update_date列,点「开始」→「删除重复项」,最后加载回Excel。
方案2:辅助列+筛选(小数据量快速搞定)
- 加辅助列D,标记区间:
D2单元格输入:=IF(A2<=DATE(2023,1,5),"区间1","区间2")(A列对应你的date列,自行调整列号) - 加辅助列E,计算每组要保留的update_date:
E2单元格输入:
(C列对应=IF(D2="区间1",MINIFS(C:C,A:A,A2,B:B,B2,D:D,D2),MAXIFS(C:C,A:A,A2,B:B,B2,D:D,D2))update_date,B列对应amount,按需修改列号) - 筛选目标行:选中E列,筛选「等于」C列的内容,把这些行复制到新表就是最终结果。
内容的提问来源于stack exchange,提问作者rekas
相关产品推荐
相关产品推荐

