Excel中去重并只保留最近n次日期/最大最小值的数据
↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓
假设一个应用场景如下:当前存在一个产品的记录表,记录着这一个产品对应的日期及状态。同一个产品中存在多条数据,记录产品在不同时间的状态。现在需要根据需求找到最新的一条/最新的n条记录。
Excel测试数据如下:
产品ID | 日期 | 记录 |
---|---|---|
1 | 2020/6/1 | 已投产 |
2 | 2020/6/1 | 停产 |
4 | 2020/5/1 | 产出23件 |
1 | 2020/4/6 | 准备中 |
2 | 2020/4/6 | 下线中 |
3 | 2020/3/26 | 准备中 |
5 | 2020/3/26 | 已投产 |
1 | 2020/2/26 | 准备中 |
1 | 2020/1/26 | 评估中 |
其中我们需要拿到每个产品最新的记录状态,结果预期如下:
产品ID | 日期 | 记录 |
---|---|---|
1 | 2020/6/1 | 已投产 |
2 | 2020/6/1 | 停产 |
4 | 2020/5/1 | 产出23件 |
3 | 2020/3/26 | 准备中 |
5 | 2020/3/26 | 已投产 |
如果需要求最大/最小值或者前n大/小的数据逻辑是一致的,因为日期实质上也是一个数值,越新的日期值越大,找最新的n条数据就是要找前n大/小的数据。
方法一:直接去重求top1
首先将数据按照日期从新到旧排序(如果是去重并保留最大或最小值,则按照值排序即可),随后在选项卡中依次点击数据–去除重复项,并选择去重的列。在本例中选择产品ID,去重后即可得到结果
这种方法主要是利用Excel在去重时是从上到下遍历的,并且总是保留第一个不重复的值
方法二:公式去重求top n
将数据按照日期从新到旧排序(如果是去重并保留最大或最小值,则按照值排序即可)
在辅助列中输入公式:
=COUNTIF($A$2:A2,A2)
并向下填充。
这一个公式用到countif公式和单元格的相对/绝对引用,首先countif公式可以对范围内符合条件的值进行计数,从而判断是否存在重复。而计数的范围选择从产品ID第一行开始逐渐增加,这样第一次出现的产品ID在辅助列中为1,第二次出现则辅助列的值为2…从而得到每一个产品ID出现的次数和顺序。
这一种方法相较于第一种方法的优点是可以选出每个不重复产品ID的前n个(Top n)值。例如要找每个产品ID的最新的日期,则选取所有的辅助列为1的值即可,如果需要找每个产品IDI的最新的2条记录,则选取辅助列小于等于2的行.
同理,求不同的ID/类别/区间的前n的最大值/最小值都是一样的,只要同样按照需求先排序然后添加辅助列即可
本文来自博客园,作者:Smilecoc,转载请注明原文链接:https://www.cnblogs.com/smilecoc/p/18724334
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码