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

SQL分组查询:如何获取当日最小datetime及次日5点前最大datetime?

解决方案

核心问题是调整记录的归属日期逻辑:将凌晨00:00-05:00的打卡记录归到前一天的统计组中,而非记录本身的日期。基于这个逻辑,可修改SQL语句如下:

逻辑说明

  1. 为每条记录计算实际归属的统计日期:
    • 若datetime的时间部分早于当日05:00,归属日期为datetime对应的日期减1天
    • 否则归属日期为datetime对应的日期
  2. 按person_id和计算出的归属日期分组,取组内最早的datetime作为上班时间(in.),最晚的datetime作为下班时间(out.)

最终SQL语句

SELECT 
  [person_id] AS 'id.'
  , CASE 
      WHEN CAST([datetime] AS TIME) < '05:00:00' 
      THEN DATEADD(DAY, -1, CAST([datetime] AS DATE))
      ELSE CAST([datetime] AS DATE)
    END AS 'date.'
  , MIN([datetime]) AS 'in.'
  , MAX([datetime]) AS 'out.'
FROM tablename
GROUP BY 
  [person_id]
  , CASE 
      WHEN CAST([datetime] AS TIME) < '05:00:00' 
      THEN DATEADD(DAY, -1, CAST([datetime] AS DATE))
      ELSE CAST([datetime] AS DATE)
    END

结果验证

针对你的测试数据,这条SQL会:

  • 将2022-01-03 2:00:00的归属日期设为2022-01-02,归入2022-01-02分组并成为该组的out.时间
  • 2022-01-03分组仅包含8:30:00和17:30:00两条记录,对应in.和out.分别为这两个时间
  • 最终输出完全匹配你的期望结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:35:45