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

Excel按姓名日期匹配上一条记录值,求公式或SQL实现方案

解决方案

Excel 公式实现

前提:表格已按时间升序排列,表头在第1行,数据从第2行开始,列对应关系为:A=Date、B=Time、C=type、D=name、E=prior time、F=prior type。

「Prior Time」列公式(E2单元格)

输入以下公式后下拉填充所有行即可:
=IFERROR(LOOKUP(1,0/((A$1:A1=A2)*(D$1:D1=D2)),B$1:B1),"")
公式逻辑:匹配当前行上方所有「同日期、同姓名」的记录,取最近一条的Time值,无匹配项(该用户当日第一条记录)返回空。

「Prior Type」列公式(F2单元格)

输入以下公式后下拉填充所有行即可:
=IFERROR(LOOKUP(1,0/((A$1:A1=A2)*(D$1:D1=D2)),C$1:C1),"")
逻辑和上方一致,仅返回字段改为type列。
如果使用Excel 365/2021及以上版本,也可以用XLOOKUP简化实现,以Prior Time为例:
=IFERROR(XLOOKUP(1,(A$1:A1=A2)*(D$1:D1=D2),B$1:B1,"",0,-1),"")

SQL 实现

假设表名为work_records,字段名和表格列名对应,用窗口函数LAG即可快速实现,SQL语句如下:

SELECT 
    `date`,
    `time`,
    `type`,
    `name`,
    LAG(`time`) OVER (PARTITION BY `date`, `name` ORDER BY `time`) AS prior_time,
    LAG(`type`) OVER (PARTITION BY `date`, `name` ORDER BY `time`) AS prior_type
FROM work_records
ORDER BY `date`, `time`;

逻辑说明:

  • PARTITION BY按日期、姓名分组,仅对比同组内的记录
  • ORDER BY按时间排序保证取到的是最近的上一条记录
  • LAG函数默认取当前行的上一行对应字段值,无上行返回NULL,完全匹配需求。

内容的提问来源于stack exchange,提问作者james fay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:54:00