多保单数据筛选需求:如何获取每个邮箱地址对应的最新联系日期?
看来你需要从这份保单联系数据里,提取每个邮箱对应的最新联系记录对吧?我给你两种最常用的解决方案,分别适用于数据库和Excel场景:
方法一:使用SQL查询(数据库场景)
如果你的数据存储在数据库中,用窗口函数ROW_NUMBER()就能轻松实现需求。需要注意的是你的ContactDate格式是DD:MM:YYYY:HH:MI:SS,得先把它转换成数据库能识别的日期时间类型再排序。
示例SQL语句:
WITH ranked_records AS ( SELECT Policy, ContactDate, Email, Name, -- 按邮箱分组,将联系日期转成时间类型后倒序排名,最新的排第1 ROW_NUMBER() OVER ( PARTITION BY Email ORDER BY STR_TO_DATE(ContactDate, '%d:%m:%Y:%H:%i:%S') DESC ) AS rn FROM your_table_name -- 替换成你的实际表名 ) -- 筛选出每个邮箱排名第1的记录(最新联系记录) SELECT Policy, ContactDate, Email, Name FROM ranked_records WHERE rn = 1;
执行后得到的结果就是你预期的:
| Policy | ContactDate | Name | |
|---|---|---|---|
| POL2 | 17:02:2021:15:10:44 | JON@gmail | Jon |
| PO3 | 13:02:2021:09:41:00 | Pete@aol | Pete |
| POL4 | 14:02:2021:18:15:06 | Kate@yahoo | Kate |
方法二:使用Excel处理(本地表格场景)
如果你用Excel处理这份数据,可以通过数组公式或Power Query实现:
方式1:数组公式筛选
- 假设数据在A-D列(A=Policy,B=ContactDate,C=Email,D=Name),在E2单元格输入数组公式:
=MAX(IF($C$2:$C$6=C2,$B$2:$B$6))
输入完成后按Ctrl+Shift+Enter(Excel 365版本直接回车即可),然后下拉填充到E6。这列会计算每个邮箱对应的最新联系日期。 - 在F2单元格输入公式:
=B2=E2,下拉填充。这列会标记当前行是否为该邮箱的最新记录。 - 筛选F列为
TRUE的行,就能得到目标结果。
方式2:Power Query(更高效的批量处理)
- 选中数据区域,点击「数据」选项卡→「从表格/区域」(勾选「我的表格有标题」)。
- 在Power Query编辑器中,点击「转换」选项卡→「分组依据」:
- 分组列选择
Email - 新列名设为
LatestContactDate,操作选「最大值」,列选ContactDate
- 分组列选择
- 关闭并上载分组后的表格,再和原表格通过
Email+LatestContactDate做合并查询,筛选出匹配的记录即可。
内容的提问来源于stack exchange,提问作者pat
相关产品推荐
相关产品推荐

