sql查询员工上下班

sql查询,
10点前的最小值为上班时间,下午4点后的最小值为下班时间
超过10点则为迟到,早于4点则为早退

例如查询某个时间段的考勤数据:
select * from 考勤表 where 上班时间 between 7:00 and 10:00
具体语句要按你数据表才能写出来了


select userid
    ,(case when DATEPART(HOUR,firsttime)>10 then '迟到' else '上班' end) 
    ,(case when DATEPART(HOUR,firsttime)<16 then '早退' else '下班' end)
    ,(case checktimes<2 then '缺卡' else '正常' end)
from (
    select userid,CONVERT(date,checktime) as dt,MAX(checktime) as lasttime,MIN(checktime) as firsttime,COUNT(0) as checktimes 
    from attendance 
    group by userid,CONVERT(date,checktime)
) a

真正的业务逻辑要比这个复杂很多,比如旷工,那一天都没有任何打卡,比如8:30之后就算迟到,再比如,有人加班,下班打卡时间已经到第二天

你需要把所有逻辑考虑好了,才能真正满足需求,而且,和表结构也有很大关系

直接条件查询就行了,每天最小的时间超过10点就迟到,最晚的一条记录不超过4点就算早退,这还需要怎么写