1、维护数据
员工表
考勤表
2、查询迟到、早退数据
3、sql
SELECT
T.emp_no,
T.username,
T1.attendace_time,
T1.start_time,
T1.end_time,
CASE
WHEN DATE_FORMAT(T1.start_time, '%H') >= '09' THEN
'迟到'
END AS start_time_flag,
CASE
WHEN DATE_FORMAT(T1.end_time, '%H') <'17' THEN
'早退'
END AS end_time_flag
FROM
`员工表` T
INNER JOIN `考勤表` T1 ON T.emp_no = T1.emp_no
WHERE
DATE_FORMAT(T1.attendace_time, '%Y%m') = '201909' /*月份参数*/
sql格式文件可以直接用记事本或者编辑器来打卡。如果是要导入到MYSQL的话,在CMD下面:
cmd>d:/mysql/bin/mysql.exe
-h
主机
-u
用户名
-p
库名
<
sql文件绝对路径
然后回车输入密码
d:/mysql/bin/mysql.exe
这里替换为你本机mysql.exe的路径
select user_id,DATE_ADD(MAX(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) ,DATE_ADD(MIN(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) from checkinout group by user_id,DATE_FORMAT(DATE_SUB(checktime,INTERVAL 4 hour),'%Y-%m-%d')试一下上面的sql语句, 我觉得可以实现你的要求,解决思路就是肯定要分组,普通情况我们分组是同一天分在一组,这样会导致比如'2016-07-13 03:00:00' 这种时间会分在07-13号这一天里 ,按你的要求应该分在07-12这天里 才对,,所以我们把时间减去四个小时然后再分组,DATE_SUB(checktime,INTERVAL 4 hour) 这个就是减去四个小时,然后用DATE_FORMAT 格式化成年月日的格式进行group by,select 的时候 MAX(DATE_SUB(checktime,INTERVAL 4 hour),min(...) 这个是查减了四小时的最大值和最小,也就是当天离开时间和到公司时间(减四小时),在用DATE_ADD 加四个小时,就是原本离开时间和到公司时间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)