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

如何在SQL Server中实现符合Last IN First OUT规则的考勤数据转换?

SQL Server 实现 Last IN First OUT 数据聚合方案

需求说明

从原始打卡记录表(表1)中,按日期分组,提取每日最后一次进入(IN)时间和第一次离开(OUT)时间,生成表2格式的结果,遵循Last IN First OUT规则。

原始数据(表1)

日期时间IN/OUT
8/1/20220800HIN
8/1/20220802HIN
8/1/20221700HOUT
8/2/20220810HIN
8/2/20221700HOUT
8/3/20220800HIN
8/3/20221700HOUT
8/3/20221710HOUT

目标结果(表2)

日期INOUT
8/1/20220802H1700H
8/2/20220810H1700H
8/3/20220800H1700H

最优实现代码

使用聚合函数直接分组计算,仅需一次表扫描,效率最高:

SELECT 
    日期,
    MAX(CASE WHEN [IN/OUT] = 'IN' THEN 时间 END) AS [IN],
    MIN(CASE WHEN [IN/OUT] = 'OUT' THEN 时间 END) AS [OUT]
FROM 表1
GROUP BY 日期
ORDER BY 日期;

代码说明

  1. 分组逻辑:按日期字段分组,确保每日数据单独计算。
  2. Last IN 提取:通过MAX(CASE...)筛选出所有IN记录,取最大的时间值(即当日最晚进入时间)。
  3. First OUT 提取:通过MIN(CASE...)筛选出所有OUT记录,取最小的时间值(即当日最早离开时间)。
  4. 兼容性:即使时间字段是字符串类型(如示例中的0802H格式),只要格式统一,字符串的MAX/MIN比较逻辑完全符合时间先后顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:57:16