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

SQL Server如何查询Attendance表各分行每日最早签到记录及对应员工ID

SQL Server 考勤表分行每日最早签到记录查询方案

实现方案(推荐窗口函数写法,SQL Server 2008+支持)

核心逻辑:按分行ID、签到自然日对记录分组,组内按签到时间升序排序,取每组第一条记录即可。

WITH RankedAttendance AS (
    SELECT 
        BranchID,
        SignDate,
        EmployeeID,
        ROW_NUMBER() OVER (
            PARTITION BY BranchID, CAST(SignDate AS DATE) 
            ORDER BY SignDate ASC
        ) AS rn
    FROM Attendance
)
SELECT 
    BranchID,
    SignDate 最早签到时间,
    EmployeeID 最早签到员工ID
FROM RankedAttendance
WHERE rn = 1;

注意事项

  • 若需查询同一分行同日所有并列最早签到的员工,将代码中的ROW_NUMBER()替换为RANK()即可
  • CAST(SignDate AS DATE)用于提取DateTime类型的日期部分,实现按自然日分组
  • 若需兼容更旧版本的SQL Server,可使用关联子查询写法:
SELECT 
    a.BranchID,
    a.SignDate 最早签到时间,
    a.EmployeeID 最早签到员工ID
FROM Attendance a
INNER JOIN (
    SELECT 
        BranchID,
        MIN(SignDate) MinSignDate
    FROM Attendance
    GROUP BY BranchID, CAST(SignDate AS DATE)
) b ON a.BranchID = b.BranchID AND a.SignDate = b.MinSignDate;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:15:05