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

Microsoft Access考勤查询编写求助:匹配打卡记录计算时长

Access考勤时长计算查询方案

核心思路

针对打卡记录的I(进入)和O(离开)标识,通过自连接+子查询为每条进入记录匹配对应最早的离开记录,再用DateDiff计算时段时长。

实现SQL语句

SELECT
    Format(I.CHECKTIME, 'yyyy-mm-dd') AS 日期,
    I.USERID AS 用户ID,
    I.CHECKTIME AS 进入时间,
    O.CHECKTIME AS 离开时间,
    DateDiff("n", I.CHECKTIME, O.CHECKTIME) AS 时长(分钟)
FROM
    考勤表 AS I
INNER JOIN
    考勤表 AS O ON I.USERID = O.USERID 
    AND O.CHECKTYPE = 'O'
    AND O.CHECKTIME = (
        SELECT Min(CHECKTIME)
        FROM 考勤表
        WHERE USERID = I.USERID 
          AND CHECKTYPE = 'O' 
          AND CHECKTIME > I.CHECKTIME
    )
WHERE
    I.CHECKTYPE = 'I'
ORDER BY
    I.USERID, I.CHECKTIME;

关键说明

  • 子查询的作用是精准匹配:为每条I记录找到同一用户、时间晚于进入时间的最早O记录,避免一对多的错误关联。
  • DateDiff("n", 开始时间, 结束时间)计算分钟差,若需小时/秒单位,可将"n"替换为"h"/"s"。
  • Format函数用于统一提取日期部分,适配结果展示需求。

异常处理提示

如果存在只有进/只有出的异常记录,当前语句会自动过滤;若需保留这类记录,可将INNER JOIN改为LEFT JOIN,并通过Nz函数处理NULL值(比如Nz(DateDiff("n", I.CHECKTIME, O.CHECKTIME), 0))。

内容的提问来源于stack exchange,提问作者abed dak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:57:19